在mongodb中获取叶节点根之前的所有层次结构父节点
您好,我正在以下面的格式在NoSQL中存储文件夹树结构在mongodb中获取叶节点根之前的所有层次结构父节点,mongodb,mongodb-query,Mongodb,Mongodb Query,您好,我正在以下面的格式在NoSQL中存储文件夹树结构 Document{{_id=587bedc1da0847d7ad8b7056, name=firstlevel, parent_folder=null}} Document{{_id=587beddcda0847d7ad8b7057, name=secondlevel, parent_folder=firstlevel}} Document{{_id=587bedf2da0847d7ad8b7058, name=thirdlevel, pa
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
(可选,因为我已经知道我处于哪个级别)。有人能告诉我我需要遵循什么样的模型树结构吗?或者在没有父、子、祖先、路径等模型树结构的情况下可以这样做吗
提前感谢。对于当前的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"
}]
}
在当前的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"
}]
}