以下是我的假设用户集合,其中允许多个地址:
{
"firstName": "Joe",
"lastName": "Grey",
...
"addresses":
[
{
"name": "Default",
"street": "...",
...,
"isDefault": true
},
{
"name": "Home",
"street": "...",
...,
"isDefault": false
},
{
"name": "Office",
"street": "...",
...,
"isDefault": false
}
]
}
假设我想使用以下新项更新第二个地址(Home
):
{
"name": "New home",
"street": "Ruta del Sol"
},
如何使用新项目更新数组的第二项,同时考虑新项目是否可能提供地址的所有字段?
在this post中将向我展示如何更新给定索引处的字段,确保地址名称保持唯一。现在,我想更新整个项目,而不是更新单个字段。
答案 0 :(得分:1)
您需要做的就是转换新的json数据以进行更新。例如:
让我们假设您有新的Json数据,只有两个字段'name'和'isDefault'。
var newData = {"name" : "New Val","isDefault":true};
var updateData = {};
for (key in newData ) {
updateData["addresses.$."+key]=newData[key];
};
db.projectPlan.update({_id:1, 'addresses.name': 'Home'}, {$set:updateData});
答案 1 :(得分:0)
var renamed = 'Office'; // from user input
var users = getUserMongoCollection();
var address = {
name: "Office,
street: "Ruta del Sol"
};
users.update({_id:userId },
{ $set : { 'addresses.1' : address } }, function(err){
//all done!
});