如 https://www.slideshare.net/mongodb/webinar-working-with-graph-data-in-mongodb 中所述, 幻灯片 50 可以在 View 上使用 $graphLookup
以获得嵌套格式的 2 层深度树结构。
我有一个 MongoDB 集合,其中树节点作为文档,格式如下:
{ "_id" : { "$oid" : "5b1a952361c6fa3418a15660" },
"nodeId" : 23978995,
"name" : "settings",
"type" : "Node",
"parentId" : [ 23978893, 23979072, 23979081 ] }
我创建了一个 View ,如下所示:
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"
}
}
]);
我的问题是如何获得整个层次结构、所有级别的深度?
最佳答案
不幸的是,您无法获得嵌套格式的完整深度。使用 View 是一种解决方法,可让您执行该操作,但您需要为所需的每个嵌入级别创建一个新 View 。 相反,我会考虑在不提供深度的情况下执行 graphLookup,从根级别开始,在单个查询中获取所有层次结构,然后再在应用程序级别计算树。
这看起来像这样:
db.node.aggregate([
{ $match: {
parentId: null
}},
{ $graphLookup: {
from: "node",
startWith: "$nodeId",
connectFromField: "nodeId",
connectToField: "parentId",
depthField: "depth",
as: "children"
}}
]);
这应该让您一次性获取整个层次结构,因此接下来,您需要根据“children”数组中的信息计算应用程序中的树。
关于MongoDB $graphLookup 获取子级所有级别的深层嵌套结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50767930/