您好我在NoSQL中以下列格式存储文件夹树结构。
Document{{_id=587bedc1da0847d7ad8b7056, name=firstlevel, parent_folder=null}}
Document{{_id=587beddcda0847d7ad8b7057, name=secondlevel, parent_folder=firstlevel}}
Document{{_id=587bedf2da0847d7ad8b7058, name=thirdlevel, parent_folder=secondlevel}}
我需要获得thirdlevel
的父母,我的输出应该包含firstlevel
,secondlevel
,thirdlevel
(可选,因为我已经知道我在哪个级别) )。任何人都可以建议我需要遵循什么样的模型树结构,或者可以在没有父,子,祖先,路径等模型树结构的情况下完成,
提前致谢。
答案 0 :(得分:2)
使用当前的Mongo 3.4版本,您可以使用$graphLookup
。
如果您有以下内容。
{
"_id": ObjectId("587bedc1da0847d7ad8b7056"),
"name": "firstlevel",
"parent_folder": null
} {
"_id": ObjectId("587beddcda0847d7ad8b7057"),
"name": "secondlevel",
"parent_folder": "firstlevel"
} {
"_id": ObjectId("587bedf2da0847d7ad8b7058"),
"name": "thirdlevel",
"parent_folder": "secondlevel"
}
查询所有家长。
db.nodes.aggregate([{
$graphLookup: {
from: "nodes",
startWith: "$name",
connectFromField: "parent_folder",
connectToField: "name",
as: "parents",
}
}]);
为查询父母thirdlevel
{$match:{name:"thirdlevel"}}
示例输出:
{
"name": "thirdlevel",
"parents": [{
"_id": ObjectId("587beddcda0847d7ad8b7057"),
"name": "secondlevel",
"parent_folder": "firstlevel"
}, {
"_id": ObjectId("587bedc1da0847d7ad8b7056"),
"name": "firstlevel",
"parent_folder": null
}, {
"_id": ObjectId("587bedf2da0847d7ad8b7058"),
"name": "thirdlevel",
"parent_folder": "secondlevel"
}]
}