MongoDB 使用 $graphLookup 跨越多个 collections 的树结构
MongoDB tree structure using $graphLookup spanning multiple collections
我从 MongoDB 开始,我正在尝试构建存储在不同 collection 中的 objects 的树结构。我知道层次结构有多深,所以递归不是问题。
树的每一层都存储在不同的collection中(出于我无法控制的原因),所以我必须从Collection_A
开始,在[中获取所有children =14=],然后从 Collection_C
中获取 Collection_B
中的所有 children 个元素。 Collection_B
中的每个项目都具有来自 Collection_A
的 parent 的 _id
,Collection_C
中的每个项目都具有其 [=52= 的 $_id
] 来自 Collection_B
.
此外,每个项目只有一个 parent,但可以有零个、一个或多个 children。
如何获取 Collection_A
中元素的所有 children 和 grandchildren?
我知道如何使用 $graphLookup
在 Collection_B
中得到 children,但我该如何更深入呢?我认为我的问题是为 children.
数组中的每个元素引用 $_id
字段
Here 是一个 link mongoplayground,具有我的 collection 的基本结构和我尝试做的事情。
编辑:在@Hussam 的帮助下我走得更远,但我意识到我的 post 不够清楚。
这就是我想要实现的目标:
[
{
"_id": 1,
"key_A": "value_a1"
"children_A": [
{
"_id": 11,
"id_A": 1,
"key_B": "value_b2",
"children_B": [
{
"_id": 103,
"id_B": 11,
"key_C": "value_c4"
},
{
"_id": 102,
"id_B": 11,
"key_C": "value_c3"
}
]
},
{
"_id": 10,
"id_A": 1,
"key_B": "value_b1",
"children_B": [
{
"_id": 101,
"id_B": 10,
"key_C": "value_c2"
},
{
"_id": 100,
"id_B": 10,
"key_C": "value_c1"
}
]
}
]
}
]
您现有的管道中存在一些错误。你在第二阶段的startWith
不是变量。
https://mongoplayground.net/p/uIWP_mk75xm
为了回应您的编辑,您需要执行以下操作才能将其放入集合 A 对象中
我从 MongoDB 开始,我正在尝试构建存储在不同 collection 中的 objects 的树结构。我知道层次结构有多深,所以递归不是问题。
树的每一层都存储在不同的collection中(出于我无法控制的原因),所以我必须从Collection_A
开始,在[中获取所有children =14=],然后从 Collection_C
中获取 Collection_B
中的所有 children 个元素。 Collection_B
中的每个项目都具有来自 Collection_A
的 parent 的 _id
,Collection_C
中的每个项目都具有其 [=52= 的 $_id
] 来自 Collection_B
.
此外,每个项目只有一个 parent,但可以有零个、一个或多个 children。
如何获取 Collection_A
中元素的所有 children 和 grandchildren?
我知道如何使用 $graphLookup
在 Collection_B
中得到 children,但我该如何更深入呢?我认为我的问题是为 children.
$_id
字段
Here 是一个 link mongoplayground,具有我的 collection 的基本结构和我尝试做的事情。
编辑:在@Hussam 的帮助下我走得更远,但我意识到我的 post 不够清楚。
这就是我想要实现的目标:
[
{
"_id": 1,
"key_A": "value_a1"
"children_A": [
{
"_id": 11,
"id_A": 1,
"key_B": "value_b2",
"children_B": [
{
"_id": 103,
"id_B": 11,
"key_C": "value_c4"
},
{
"_id": 102,
"id_B": 11,
"key_C": "value_c3"
}
]
},
{
"_id": 10,
"id_A": 1,
"key_B": "value_b1",
"children_B": [
{
"_id": 101,
"id_B": 10,
"key_C": "value_c2"
},
{
"_id": 100,
"id_B": 10,
"key_C": "value_c1"
}
]
}
]
}
]
您现有的管道中存在一些错误。你在第二阶段的startWith
不是变量。
https://mongoplayground.net/p/uIWP_mk75xm
为了回应您的编辑,您需要执行以下操作才能将其放入集合 A 对象中