MongoDB查询-子文档

MongoDB查询-子文档,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我有下面这样的文件 { "_id" : ObjectId("xxxx"), "main_array" : [ { "cars" : [ "BMW", "Toyota" ], "parts" : [ 990 ] } ] } { "_id

我有下面这样的文件

{ 
    "_id" : ObjectId("xxxx"), 
    "main_array" : [
        {
            "cars" : [
                "BMW", 
                "Toyota"
            ], 
            "parts" : [
                990
            ]
        }
    ]
}
{ 
    "_id" : ObjectId("yyy"), 
    "main_array" : [
        {
            "cars" : [
                "C2", 
                "BMW"
            ], 
            "parts" : [
                991, 
                123
            ]
        }, 
        {
            "cars" : [
                "Audi", 
                "Ford"
            ], 
            "parts" : [
                990
            ]
        }
    ]
}
第一部分 我需要查询parts:990,只返回与parts->990相同的car数组文档

输出

 "cars" : [
                "Audi", 
                "Ford"
            ]
第2部— 更新具有相同零件号的所有其他文档

{ 
    "_id" : ObjectId("xxxx"), 
    "main_array" : [
        {
            "cars" : [
                "BMW", 
                "Toyota"
            ], 
            "parts" : [
                990
            ],
            "other_cars" : [[
                "Audi", 
                "Ford"
            ]]
        }
    ]
}
非常感谢您的帮助

第1部分:

db.collection.aggregate([
    {
        $match: {
            "main_array.parts": 990,
            "_id": {$ne: ObjectId("xxxx")} //exclude curr document
        }
    },
    {
        $unwind: "$main_array"
    },
    {
        $match: {
            "main_array.parts": 990
        }
    },
    {
        $unwind: "$main_array.cars"
    },
    {
        $group: {
            _id: null,
            cars: {$addToSet: "$main_array.cars"}
        }
    },
    {
        $project: {
            _id: 0,
            cars: 1
        }
    }
])
第2部分: 现在我们只需更新旧文档:

db.collection.findOneAndUpdate(
   { _id: oldDocumentID },               
   { $set: { "main_array.$[element].other_cars" : aggregationResultsArray } },
   {
       arrayFilters: [ { "element.parts": 990 } ]
   }
)

为什么第1部分只得到奥迪和福特,而没有宝马和丰田?如果我找到990,它给了我数组中的2个文档。我只想要包含第990部分的文档。我要问的是,为什么步骤1中的
ObjectId(“xxxx”)
不匹配,因为它在同一个文档中。我们正在搜索具有相同零件号的其他子文档,以及第一个子文档中的另一个“汽车”存储对象
yyy
具有此格式的
“汽车”:[“奥迪”、“福特”、“宝马”
],您希望宝马成为更新的一部分吗?