Mongodb$查找对象/文档数组

Mongodb$查找对象/文档数组,mongodb,aggregation-framework,lookup,Mongodb,Aggregation Framework,Lookup,myorders集合的文档架构如下所示: { "_id" : ObjectId("Id of this record"), "location_data" : { "type" : "main", "location_id" : ObjectId("this location's id") }, "item_details" : [ { "item_id" : ObjectId("this item'

my
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
        }
    ]
}
我将
存储在另一个集合中,其架构如下所示:

{
    "_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文档中,我没有找到任何可以处理对象数组的东西。任何帮助都是值得的


谢谢

尝试以下聚合查询:

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!