使用节点在mongodb中更新SubDocument

时间:2014-08-12 12:20:06

标签: node.js mongodb

我有这样的收藏结构。

application_data: {
  name : A,
  site : B,
  location : [
    { key1 : value1, key2 : value2},
    { key3 : value3, key4 : value4}
  ]
}

现在我想将另一个数组添加到“location”作为子文档,以便我的位置变为

location : [
  { key1 : value1, key2 : value2},
  { key3 : value3, key4 : value4, key5 :[{subkey1:subvalue1, subkey2:subvalue2}]}
]

我试过$push& $addToSet这对我没有帮助。有人能帮助我吗? 如果您使用nodejs解释一个示例,将会很有帮助。

1 个答案:

答案 0 :(得分:1)

您实际尝试做的是将新字段添加到现有子文档中。您可以使用$setpositional operator $

来执行此操作
db.applications.update({
  name: 'A', // querying for parent document
  'location.key3': 'value3' // querying for an exact subdocument to add new field to
}, {
  $set: {
    'location.$.key5': [{
      subkey1: 'subvalue1',
      subkey2: 'subvalue2'
    }]
  }
})

您可以使用$push$addToSet获得相同的结果,如果您想向'location.key5'添加多个子文档,效果会更好:

db.applications.update({
  name: 'A',
  'location.key3': 'value3'
}, {
  $push: {
    'location.$.key5': {
      subkey1: 'subvalue1',
      subkey2: 'subvalue2'
    }
  }
})

db.applications.update({
  name: 'A',
  'location.key3': 'value3'
}, {
  $addToSet: {
    'location.$.key5': {
      subkey1: 'subvalue1',
      subkey2: 'subvalue2'
    }
  }
})

有关详细信息,请参阅Update Documents in an Array