gpt4 book ai didi

javascript - mongoDB:使用父引用查找模型树结构中丢失的文档

转载 作者:可可西里 更新时间:2023-11-01 10:42:35 25 4
gpt4 key购买 nike

我有一些文档以模型树结构组织(深度是可变的!)。不幸的是,一些文件丢失了,我需要找到那些断链。如您所见,该链中的最后一个文档始终具有 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"
]
}

我需要知道的是是否缺少任何父元素或是否缺少最后一个元素(=现有类型)。

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);

但这效果不佳,因为我需要使用循环向上移动直到顶部文档(= 现有类型)。

最佳答案

如果你需要沿着树向下走,你在这里谈论递归,所以你可能需要编写一个递归搜索函数

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);
}
});

或类似的东西...(没有数据很难调试)

关于javascript - mongoDB:使用父引用查找模型树结构中丢失的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35072194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com