更新/迭代嵌入式阵列MongoDB

时间:2014-12-24 04:44:16

标签: mongodb

我有一个类似的文档结构:

{   
  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。

是否可以使用特定的选择器/修改器组合完成此操作?

1 个答案:

答案 0 :(得分:1)

不,没有多个键。对于一个键"a",您可以使用类似

的查询
db.test.update({ "subArray.key" : "a" }, { "$push" : { "subArray.$.subData" : "dataToPush" } })

但$ position运算符只能用于一次更新中的单个匹配。您可以按上述每个键执行一次更新,或检索文档,根据所有键修改它,然后保存原始文件。