以下是假设的Users
集合,其中允许多个地址:
{
"firstName": "Joe",
"lastName": "Grey",
...
"addresses":
[
{
"name": "Default",
"street": "..."
...
},
{
"name": "Home",
"street": "..."
...
},
{
"name": "Office",
"street": "..."
...
}
]
}
每个地址都有一个名称......应该是唯一的 - 例如没有两个名为 Default 的地址。如果我想要更新,请说索引1处的地址( Home ),如何确保更新数据不包含名称默认和 Office
我认为两步法(即find
然后update
)不会非常正确,因为数据可能会在find
和后续{{1}之间更新操作,不是吗?
答案 0 :(得分:1)
var renamed = 'Office'; // from user input
var users = getUserMongoCollection();
users.update({_id:userId, 'addresses.name': { $ne : renamed } },
{ $set : { 'addresses.1.name' : renamed } }, function(err){
//all done!
});
按ID查找记录,只有在数组不包含新名称时才更新记录。