我有这样的收藏结构。
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解释一个示例,将会很有帮助。
答案 0 :(得分:1)
您实际尝试做的是将新字段添加到现有子文档中。您可以使用$set和positional 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。