MongoDB $查找对象/文档数组

我的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"),"item_details" : [
        {
            "title": "this item's title","item_id" : ObjectId("this item's id"),{
            "title": "this item's title","qty" : 200
        }
    ]
}

在Mongodb文档中,我没有发现任何可用于对象数组的东西。任何帮助都是可观的。

谢谢

k13122603 回答:MongoDB $查找对象/文档数组

请尝试以下汇总查询:

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! 
本文链接:https://www.f2er.com/3092579.html

大家都在问