我的数据库中有三个集合:
- 总代理商
- 水果
- 工具
我需要链接/查找来自分销商集合的单个文档的集合、成果和工具.
水果和工具中的文档数量在实践中相当有限(每个文档最多5-10个).所以就性能而言,我想这应该没问题.
数据 struct 可从:https://mongoplayground.net/p/AkCarFmdJh1获取
db={
"总代理商": [
{
"name": "Distributor 1",
// more attributes here
"children": [
{
"name": "Country 1",
// more attributes here
"children": [
{
"name": "City 1",
// more attributes here
"children": [
{
"name": "Shop 1",
// more attributes here
"children": [
{
"name": "Fruit 1",
// more attributes here
"child": "f1"
}
]
}
]
}
]
}
]
}
],
"水果": [
{
"uid": "f1",
"name": "Fruit 1 Detail",
"variants": [
{
"uid": "v1",
"name": "Variant 1",
"工具": [
"t1",
"t2"
]
},
{
"uid": "v2",
"name": "Variant 2",
"工具": [
"t3",
"t4"
]
}
]
},
],
"工具": [
{
"uid": "t1",
"name": "Tool 1"
},
{
"uid": "t2",
"name": "Tool 2"
},
{
"uid": "t3",
"name": "Tool 3"
},
{
"uid": "t4",
"name": "Tool 4"
}
]
}
-
分发服务器集合包含深度嵌套的文档.在最后一层,子"F1"UID应替换为集合"Fruits"中的相应文档.
-
集合"Fruits"在"Tools"字段中包含集合"Tools"的UID.还应将它们替换为集合"工具"中的相应文件.
-
最后,我需要一个聚合查询,将所有三个集合链接成一个集合.
我试图用$lookup解决这个问题,但我不确定如何才能到达/链接文档中的更深层次.
GOAL:个
{
"name": "Distributor 1",
"children": [
{
"name": "Country 1",
"children": [
{
"name": "City 1",
"children": [
{
"name": "Shop 1",
"children": [
{
"name": "Fruit 1",
"child": {
"uid": "f1",
"name": "Fruit 1 Detail",
"variants": [
{
"uid": "v1",
"name": "Variant 1",
"工具": [
{ "uid": "t1", "name": "Tool 1" },
{ "uid": "t2", "name": "Tool 2" },
],
},
{
"uid": "v2",
"name": "Variant 2",
"工具": [
{ "uid": "t3", "name": "Tool 3" },
{ "uid": "t4", "name": "Tool 4" },
],
},
],
},
}
],
}
],
}
],
}
],
}
谢谢你的帮忙!
(我try 了不同的其他方法来对分发服务器集合进行更扁平的建模,但不幸的是,我找不到在应用程序中更容易处理的解决方案.欢迎提出任何建议)