使用节点在MongoDB中进行子文档更新

我有这样的collections结构。

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

现在我想添加一个另外的数组到“位置”作为一个子文档,这样我的位置就变成了

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

我尝试$push$addToSet这并没有帮助我。 有人可以帮我吗? 如果你使用nodejs解释一个例子很有帮助。

你真正要做的是将新的字段添加到现有的子文档中。 你可以使用$ set和位置操作符$来完成它:

 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' } } }) 

有关更多信息,请参阅更新数组中的文档 。