我有一个类似的文档结构:
{
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。
是否可以使用特定的选择器/修改器组合完成此操作?
答案 0 :(得分:1)
不,没有多个键。对于一个键"a"
,您可以使用类似
db.test.update({ "subArray.key" : "a" }, { "$push" : { "subArray.$.subData" : "dataToPush" } })
但$ position运算符只能用于一次更新中的单个匹配。您可以按上述每个键执行一次更新,或检索文档,根据所有键修改它,然后保存原始文件。