【发布时间】:2021-05-03 14:59:16
【问题描述】:
我正在研究存储二叉树的层次结构。 假设我有两个集合:用户和节点。 用户集合存储个人信息,节点使用父引用模式存储树的结构:https://docs.mongodb.com/manual/tutorial/model-tree-structures-with-parent-references/
用户:
[{
"_id": {
"$oid": "600365521599912a5c814e5e"
},
"nombre": "Andres",
"correo": "oachica@gmail.com"
},{
"_id": {
"$oid": "600365e9ccf1e51b2cab341f"
},
"nombre": "Andres",
"correo": "cachi777_@hotmail.com"
},{
"_id": {
"$oid": "6004591536a40941f48121f9"
},
"nombre": "Laura",
"correo": "w.l777@hotmail.com"
},{
"_id": {
"$oid": "6004596936a40941f48121fb"
},
"nombre": "Javi",
"correo": "jocta@hotmail.com"
},{
"_id": {
"$oid": "60047cf23f3f1a0d647cb2c7"
},
"nombre": "Lina",
"correo": "lvelas@hotmail.com"
}]
节点:
[{
"_id": {
"$oid": "60035d0a1599912a5c814e58"
},
"idUsuario": "600365521599912a5c814e5e",
"nodoPadre": ""
},{
"_id": {
"$oid": "60047e6874cab54a7088ca56"
},
"idUsuario": "600365e9ccf1e51b2cab341f",
"nodoPadre": {
"$oid": "60035d0a1599912a5c814e58"
}
},{
"_id": {
"$oid": "60047f42c89add3c20cff990"
},
"idUsuario": "6004591536a40941f48121f9",
"nodoPadre": {
"$oid": "60047e6874cab54a7088ca56"
}
},{
"_id": {
"$oid": "60047f5dc89add3c20cff991"
},
"idUsuario": "6004596936a40941f48121fb",
"nodoPadre": {
"$oid": "60047f42c89add3c20cff990"
}
},{
"_id": {
"$oid": "600480de9fd6a42b40679e6d"
},
"idUsuario": "60047cf23f3f1a0d647cb2c7",
"nodoPadre": {
"$oid": "60047f5dc89add3c20cff991"
}
}]
nodos 中的每个文档在 _id 和 idUsuario 绑定的用户中都有对应的文档。
通常节点集合中的文档在同一个集合中具有由 nodoPadre 字段绑定的父节点。
我可以使用 $graphLookup 聚合来获取节点的子节点:
如你所见,我得到了一个节点的子节点。现在我需要将每个孩子的个人信息放入结果数组“hijos”中,如下所示:
感谢您的帮助。
【问题讨论】:
-
我不确定还有其他简单的选择,请尝试
$unwind和$lookup与用户收藏和$group -
你能解释一下吗?我试过了,但没有得到想要的结果
标签: mongodb mongoose nosql aggregation-framework graphlookup