Javascript mongoDB:在具有父引用的模型树结构中查找缺少的文档

Javascript mongoDB:在具有父引用的模型树结构中查找缺少的文档,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,我有一些文档是以模型树结构组织的(深度是可变的!)。不幸的是,有些文件丢失了,我需要找到那些断链。如您所见,该链中的最后一个文档始终包含target字段。这是起点,我必须使用parent向上看。该链中的最后一个元素始终具有字段type { "_id" : "K7NSxNEnNSr9nCszR", "title" : "title", "type" : "book", "ancestors" : [ ] } { "_id" : "diyvwYz66yoTC

我有一些文档是以模型树结构组织的(深度是可变的!)。不幸的是,有些文件丢失了,我需要找到那些断链。如您所见,该链中的最后一个文档始终包含
target
字段。这是起点,我必须使用
parent
向上看。该链中的最后一个元素始终具有字段
type

{
    "_id" : "K7NSxNEnNSr9nCszR",
    "title" : "title",
    "type" : "book",
    "ancestors" : [ ]
}

{
    "_id" : "diyvwYz66yoTCTt9L",
    "field" : "something",
    "parent" : "K7NSxNEnNSr9nCszR",
    "ancestors" : [
        "K7NSxNEnNSr9nCszR"
    ]
}

{
    "_id" : "diyvwYz66yoTCTt9L",
    "field" : "anything",
    "target" : "D2YuXtM6Gzt4eWaW2",
    "parent" : "QWvdAyftSGANM3zy8",
    "ancestors" : [
        "K7NSxNEnNSr9nCszR",
        "QWvdAyftSGANM3zy8"
    ]
}
我需要知道的是,是否缺少任何父元素,或者是否缺少最后一个元素(=类型existing)

var broken = [];
Collection.find({ target: { $exists: true }}).forEach(function(element) {
    var startDocID = element._id;
    if (Collection.find({ _id: element.parent }).count() === 0)
        broken.push(startDocID);
});

console.log(broken);

但是这不太好,因为我需要使用一个循环向上移动,直到顶部文档(=键入existing)。

如果需要向下移动树,这里讨论的是递归,因此可能需要编写一个递归搜索函数

var broken = [];
Collection.find({ target: { $exists: true }}).forEach(function(element) {

    function recurse(e) {
        var startDocID = e._id;
        var nodes = Collection.find({ _id: e.parent });
        if (node.count() === 0)
           {broken.push(startDocID);}
        else {
           nodes.fetch().forEach(node) {
               recurse(node)
        }
    }
    recurse(element);
}
});
或者类似的东西。。。(没有数据很难调试)