在集合中查找orhphaned DBRef

时间:2011-10-13 07:48:00

标签: mongodb reference dbref

有没有简单的方法可以在查询中找到孤立的引用?我有一组具有父参考的元素。在删除了一些父母之后,我想搜索指向它们的元素,即那些有悬挂引用的元素。

我尝试了各种语法但没有效果。

3 个答案:

答案 0 :(得分:5)

假设:

  • 父集合为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 });
    }
});

答案 1 :(得分:0)

不,不,因为mongodb是非关系型的,你需要自己找到所有的关系。所有驱动程序通过请求任何引用来解析客户端的引用。在您的情况下,您需要遍历所有类别并尝试加载父项以防父项不存在 - 删除子项或执行您想要的任何操作。 Dbref documentation

答案 2 :(得分:0)

db.childCollection.find().forEach(function(f) {
    if(f.refKey && db.parentCollection.find({ "_id": f.refKey.$id}).count() != 1) {
        db.childCollection.remove({ _id: f._id });
    }
});

这对我来说非常安静..