Mongodb:如果满足条件,则将元素推送到嵌套数组
我有以下收藏:Mongodb:如果满足条件,则将元素推送到嵌套数组,mongodb,mongoose,Mongodb,Mongoose,我有以下收藏: { "_id": 11, "outerArray": [ { "_id" : 21, "field": { "innerArray" : [ 1, 2, 3 ]
{
"_id": 11,
"outerArray": [
{ "_id" : 21,
"field": {
"innerArray" : [
1,
2,
3
]
}
},
{ "_id" : 22,
"field": {
"innerArray" : [
2,
3
]
}
},
{ "_id" : 23,
"field": {
"innerArray" : [
2
]
}
}
]
}
如果innerArray
已包含元素1
或元素3
,我需要浏览集合中的所有文档并推送到innerArray
新元素4
我试着这样做,很少有其他类似的方法,但它没有像预期的那样工作,它只推到outerArray的第一个元素innerray
db.collection.updateMany(
{ "outerArray.field.innerArray": { $in: [ 1, 3 ] } },
{ $push: { "outerArray.$.field.innerArray": 4} }
)
如何将它推送到所有共同响应的内部数组
?这里的问题是您对copule事物的错误理解
当您在查询中执行“outerArray.field.innerArray”:{$in:[1,3]}
时,您得到的不仅仅是innerArray
,其中有1或3。您正在获取存在这些数组的文档
因此,您正在查询整个文档
当过滤器匹配时,必须使用更新值
因此,如果我理解正确,您需要的查询是:
db.collection.update(
{}, //Empty object to find all documents
{
$push: { "outerArray.$[elem].field.innerArray": 4 }
},
{
"arrayFilters": [ { "elem.field.innerArray": { $in: [ 1, 3 ] } } ]
})
范例
注意update
中的第一个对象是如何为空的。您必须将字段放在那里以匹配文档(不是数组,而是文档)
如果您只想更新一个文档,您必须用您想要的值填充第一个对象(查询对象),例如:{“\u id”:11}
为MongoPlayGrand网站投票,但不知道它存在!