我的orders
集合的文档架构如下:
{
"_id" : ObjectId("Id of this record"),
"location_data" : {
"type" : "main",
"location_id" : ObjectId("this location's id")
},
"item_details" : [
{
"item_id" : ObjectId("this item's id"),
"qty" : 950
},
{
"item_id" : ObjectId("this item's id"),
"qty" : 200
}
]
}
我将items
存储在另一个集合中,该集合的模式如下:
{
"_id": ObjectId("this record's id"),
"title": "this item's title",
"description": "this item's description"
}
我想要的输出是:
{
"_id" : ObjectId("Id of this record"),
"location_data" : {
"type" : "main",
"location_id" : ObjectId("this location's id")
},
"item_details" : [
{
"title": "this item's title",
"item_id" : ObjectId("this item's id"),
"qty" : 950
},
{
"title": "this item's title",
"item_id" : ObjectId("this item's id"),
"qty" : 200
}
]
}
在Mongodb文档中,我没有发现任何可用于对象数组的东西。任何帮助都是可观的。
谢谢
答案 0 :(得分:1)
请尝试以下汇总查询:
db.orders.aggregate([
{$unwind : "$item_details"}, // Since the item_details is an array, unwind it first
{$lookup: // run the $lookup to join with `items` collections
{
from: "items",
localField: "item_details.item_id",
foreignField: "_id",
as: "item_detailsTemp"
}
},
{
$addFields: { "item_details" : { $mergeObjects: [ { $arrayElemAt: [ "$item_detailsTemp", 0 ] }, "$item_details" ] } } // Replace the existing item_details with new information
},
{
$group : { // Since you've ran the $unwind at early stage, group it to make the item_details as an array again
"_id" : "$_id",
"location_data" : {$first : "$location_data"},
"item_details" : {$push : "$item_details"}}
}
])
// Voila! Hope this helps!