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
具有此格式的“汽车”:[“奥迪”、“福特”、“宝马”
],您希望宝马成为更新的一部分吗?