mongodb - 链式查找聚合 mongoDB 多个集合
问题描述
大家好,我想问一下。
所以我有3个收藏:
- 品牌:(brandId、brandName 等...)
- 合作伙伴:(partnerId、partnerName 等...)
- 伙伴关系:(partnersipId、brandId、partnerId 等...)
如您所见,我想通过 partnerId 加入合作伙伴集合,并且我已经加入了该集合。但我需要brandName 成为合作收藏中的brandName 字段。我已经尝试过这个查询:
db.getCollection('partner').aggregate([
{
$match: { partnerId: 107 }
},
{"$lookup":
{
"from" : "partnership",
"localField" : "partnerId",
"foreignField" : "partnerId",
"as" : "partnership"
}
},
{"$lookup" :
{
"from" : "brand",
"localField" : "partnership.brandId",
"foreignField" : "partnership.brandId",
"as" : "partnership.brand"
}
}])
但没有运气:(
预期结果:
{
partnerId: 107,
partnerName: 'TEST',
partnership: [
{
partnerId: 107,
partnershipId: 'd8b674ab-3c3d-4772-b5e8-81b4c0279424',
brandId: 66
brandName: 'BrandNameId66'
},
{
partnerId: 107,
partnershipId: '13246d75-59ed-47c2-82c5-54f73ad25cf0',
brandId: 77
brandName: 'BrandNameId77'
}
]
}
当前结果:
{
partnerId: 107,
partnerName: 'TEST',
partnership: {
brand: [
{
brandId: 1,
brandName: 'BrandNameId1'
},
...
]
}
}
请帮我。谢谢!
解决方案
在下一次查找之前,您需要先解除合作伙伴关系:
db.getCollection('partner').aggregate([
{
$match: { partnerId: 107 }
},
{"$lookup":
{
"from" : "partnership",
"localField" : "partnerId",
"foreignField" : "partnerId",
"as" : "partnership"
}
},
{$unwind:{path: "$partnership", preserveNullAndEmptyArrays: true}}
{"$lookup" :
{
"from" : "brand",
"localField" : "partnership.brandId",
"foreignField" : "partnership.brandId",
"as" : "partnership.brand"
}
}
{$group:{
_id:"$_id",
partnerId:{$min:"$partnerId"},
partnerName:{$min:"$partnerName"},
partnership:{$push:"$partnership"}
}}
])
推荐阅读
- javascript - 我想从 B.js - React Native 切换我在 A.js 中使用的卡片组件的可见性
- javascript - 为什么以及如何解决 chrome.runtime.onMessage 未定义?
- python-3.x - pypi 的 vaderSentiment 和 NLTK 的 vader 情绪是否相同?
- c++ - CCOMVariant 中的内存泄漏
- unity3d - 将模型从搅拌机导出到统一
- laravel - Laravel 不断创建公用文件夹
- postgresql - 使用 to_timestamp 的错误时间转换
- azure-devops - 使用 Azure Devops 将 power bi 报告分发给我们的客户
- html - 如何识别 xslt 中的制表符空间
- wordpress - Wordpress 在更新帖子时应用 add_filter('user_has_cap')