MongoDB:如何更新数组的复合项,确保没有重复项

时间:2014-03-05 18:09:56

标签: mongodb

以下是假设的Users集合,其中允许多个地址:

{
  "firstName": "Joe",
  "lastName": "Grey",
  ...
  "addresses":
  [
    {
      "name": "Default",
      "street": "..."
      ...
    },
    {
      "name": "Home",
      "street": "..."
      ...
    },
    {
      "name": "Office",
      "street": "..."
      ...
    }
  ]
}

每个地址都有一个名称......应该是唯一的 - 例如没有两个名为 Default 的地址。如果我想要更新,请说索引1处的地址( Home ),如何确保更新数据不包含名称​​默认 Office

我认为两步法(即find然后update)不会非常正确,因为数据可能会在find和后续{{1}之间更新操作,不是吗?

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查找记录,只有在数组不包含新名称时才更新记录。