我在Mongo有两个系列:
db.user.find():
{
"_id": { "$oid" : "52db05e6a2cb2f36afd63c47" },
"name": "John",
"authority_id": { "$oid" : "52daf174a2cb2f62aed63af3" },
}
{
"_id": { "$oid" : "52db05e6a2cb2f36afd63d00" },
"name": "Joe",
"authority_id": { "$oid" : "52daf174a2cb2f62aed63af3" },
}
和
db.authority.find():
{
"_id": { "$oid" : "52daf174a2cb2f62aed63af3" },
"name": "Sample Authority"
}
用户通过ObjectId存储对授权机构ID引用。
现在我的问题:有几个权限已经被删除了,不再在集合中。我需要找到一种方法,如果它们的authority_id指向已删除的权限,如何遍历“user”集合并删除它们。
我试过这个:
db.user.find(
{
$where: function() {
db.authority.find({ _id: this.authority_id }).count() == 0
}
})
但是“db”在那里是不可访问的。是否可以在迭代内部实现引用检查?
3条答案
按热度按时间xytpbqjk1#
您可以使用聚合来查找所有孤立用户,然后将其删除。
vyswwuz22#
你可以通过在javascript shell上的光标上迭代或使用任何Mongo驱动程序来删除损坏的条目。下面的例子将给予你一个在javascript shell上做这件事的想法。
r1zk6ea13#
根据http://docs.mongodb.org/manual/reference/operator/query/where/,“$where运算符表达式无法访问mongo shell中可用的某些全局函数或属性,如db”。
但您可以尝试贴图减少:http://cookbook.mongodb.org/patterns/pivot/
我会亲自用代码来做,但是您可能有不同的要求。