【发布时间】:2019-03-08 18:15:00
【问题描述】:
如https://www.slideshare.net/mongodb/webinar-working-with-graph-data-in-mongodb 中所述,幻灯片 50 可以在视图上使用 $graphLookup 以获得 嵌套格式的 2 级深度树结构>.
我有一个 MongoDB 集合,其中包含树节点作为文档,格式如下:
{ "_id" : { "$oid" : "5b1a952361c6fa3418a15660" },
"nodeId" : 23978995,
"name" : "settings",
"type" : "Node",
"parentId" : [ 23978893, 23979072, 23979081 ] }
我创建了一个类似的视图:
db.createView("treeView", "node", [
{
$graphLookup: {
from: "node",
startWith: "$nodeId",
connectFromField: "nodeId",
connectToField: "parentId",
maxDepth: 0,
as: "children"
}
}
]);
然后我执行如下图查找:
db.node.aggregate([
{ $match: {"nodeId": 23978786 } },
{
$graphLookup: {
from: "treeView",
startWith: "$nodeId",
connectFromField: "nodeId",
connectToField: "parentId",
maxDepth: 0,
as: "children"
}
}
]);
我的问题是如何获得整个层次结构,所有层次都深?
【问题讨论】:
-
$graphLookup不返回“嵌套格式”。您得到的输出与您看到的完全一样,并且可以选择添加一个属性来指示匹配的“找到的深度”。如果您正在寻找“无限深度”,那么应该有一个非常清楚的理由说明为什么数据库不存在。您当然可以指定maxDepth到您实际需要进行的深度递归。 -
@NeilLunn 请查看我提供的资源。通过创建 View 并在 View 上运行
$graphLookup,实现了嵌套。我把这个付诸实践。现在,我要问的是我能否深入了解这一点。 -
我认为这个答案是完整的答案GraphQL Hierarchy
标签: mongodb aggregation-framework tree-structure