我有一个像这样的文档结构:
{
data: null,
subArray: [{
key: 'a',
subData: []
}, {
key: 'b',
subData: []
}]
}
我将收到一个包含subArray的数组keys
,例如:`['a','b']
我想遍历subArray
将值推入subData
,以便当subArray
是时['a','b']
,我的数据现在就像:
{
data: null,
subArray: [{
key: 'a',
subData: ['dataToPush']
}, {
key: 'b',
subData: ['dataToPush']
}]
}
我有这个查询来做到这一点:
update({_id:"...", "subArray.key":{"$in":['a','b']},
{'$addToSet':{'subArray.$.subData':'...'}}})
认为那$in
会让我循环我的人生subArray
。但是我意识到这是行不通的,因为$in
获取与数组中的元素匹配的元素,所以我将获取数据,但不会在subArray上进行迭代。
是否可以使用特定的选择器/修饰符组合来完成此操作?
不,不能使用多个键。对于一个键"a"
,您可以使用类似以下的查询
db.test.update({ "subArray.key" : "a" }, { "$push" : { "subArray.$.subData" : "dataToPush" } })
但是$位置运算符只能在一次更新中用于一次匹配。您可以对每个键进行上述更新,或者检索文档,根据所有键进行修改,然后保存在原始文档上。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句