【发布时间】:2017-03-21 17:59:16
【问题描述】:
我正在尝试为 2 个集合设置与 MongoDb 的合并。 集合是嵌套的。 我有 2 个收藏:
1/ 选项
{
"_id": {
"$oid": "58c9866ff36d286bfca335b4"
},
"design": {
"mainPage": {
"imgRight": "58cc750ddc238d05dd6ca525",
"imgLeft": "58cc750ddc238d05dd6ca526"
}
}
}
2/ 表格
{
"_id": {
"$oid": "58cc750ddc238d05dd6ca525"
},
"imagePath": "logo.png"
}
如何进行聚合以获得此结果:
{
"_id": {
"$oid": "58c9866ff36d286bfca335b4"
},
"design": {
"mainPage": {
"imgRight": "58d07571d9d39e50166b5b3d",
"form_docs" : {
"imagePath": "logo.png"
}
"imgLeft": "58cc750ddc238d05dd6ca526",
"form_docs" : {
"imagePath": ""
}
}
}
}
我正在尝试使用下面的 sn-p,但它不起作用:
Options.aggregate([
{ "$unwind": "$design" },
{ "$unwind": "$design.mainPage" },
{
$lookup:
{
from: "forms",
localField: "design.mainPage.imgLeft",
foreignField: "_id",
as: "form_docs"
}
}
])
【问题讨论】:
-
您不必展开嵌套文档。您加入的字段类型在本地和国外集合中应该相同。目前它的
ObjectId和String -
谢谢。当我这样做时:
Options.aggregate([ { $lookup: { from: "forms", localField: "design.mainPage.imgLeft", foreignField: "_id", as: "form_docs" } } ])它也不起作用.. -
不会,因为
design.mainPage.imgLeft(String) 的类型与_id(ObjectId) 不同 -
我想答案就在这里..jira.mongodb.org/browse/SERVER-22781
-
另一种答案是在整个数据库中一致地使用数据;如果 forms 集合中的值为
ObjectId("58cc750ddc238d05dd6ca525"),那么 options 集合中的匹配值也应该是ObjectId("58cc750ddc238d05dd6ca525")(ObjectId 数据类型),而不是"58cc750ddc238d05dd6ca525"(字符串数据类型)。
标签: mongodb merge nested aggregation-framework