mongoDB:在具有父引用的模型树结构中查找缺失的文档
mongoDB: Find missing documents in model tree structure with parent reference
我有一些文档以模型树结构组织(深度是可变的!不幸的是,有些文件丢失了,我需要找到那些断裂的链条。如您所见,该链中的最后一个文档始终具有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函数
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 在不使用jquery的情况下查找页面中的所有锚点并附加函数
- es6 相当于下划线查找位置
- 更改JSON对象的结构
- 在DOM中查找一个模式并替换它's的内容使用jquery
- 角度控制器结构
- 如何使用jquery迭代具有相同属性的html元素并查找onclick事件
- 无法通过jQuery查找来定位层次结构中的对象
- 如何使用 jsonPath 或替代方案从 JSON 结构中的 childNode 中查找 parentNode
- 在 JSON 中查找键的值,而无需事先知道结构
- 有没有办法在IntelliJ中查找JavaScript的方法结构
- mongoDB:在具有父引用的模型树结构中查找缺失的文档
- 查找具有树状结构属性的对象的第一个引用
- 在由字符串组成的层次结构中查找最低分数
- 0(1)查找对象的数据结构
- 如何在对象数组(结构)中查找字符串
- 使用谷歌地球API查找景观结构
- 如何在键/值数据结构中查找最小值
- 数据结构——如何在保持Javascript对象/数组有序的同时维护键查找