是否有简单的方法来查找查询中的孤立引用?我有一个有父引用的元素集合。在一些父母被删除后,我想搜索指向它们的元素,即那些有悬挂引用的元素。
我尝试了各种语法,但没有一个工作。
假设:
- 父集合为
parentCollection
, - 子集合为
childCollection
- 子节点通过
childCollection.parentRefId
引用父节点,
然后您可以通过向mongo发出以下命令来删除所有悬空子对象:
db.childCollection.find().forEach(function(f) {
if(f.parentRefId && !db.parentCollection.findOne({ _id: f.parentRefId})) {
db.childCollection.remove({ parentRefId: f.parentRefId });
}
});
不,因为mongodb是非关系的,你需要自己找到所有的关系。所有驱动程序在客户端通过请求任何引用来解析引用。在你的情况下,你需要遍历所有类别,并尝试加载parent,如果parent不存在-删除child或做任何你想要的。Dbref文档
db.childCollection.find().forEach(function(f) {
if(f.refKey && db.parentCollection.find({ "_id": f.refKey.$id}).count() != 1) {
db.childCollection.remove({ _id: f._id });
}
});
这对我来说很平静…