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);
}
});
或者类似的东西。。。(没有数据很难调试)