【问题标题】:MongoDB: How to update a compound item of an array ensuring no duplicatesMongoDB:如何更新数组的复合项以确保没有重复项
【发布时间】:2014-03-06 03:20:51
【问题描述】:

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

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

每个地址都有一个名字...应该是唯一的——例如不能有两个名为 Default 的地址。如果我想更新让我们说索引 1 处的地址(Home),我如何确保更新数据不包含名称 DefaultOffice?

我猜两步方法(即find 然后update)不会很正确,因为数据可能会在find 和随后的update 操作之间更新,不是吗?

【问题讨论】:

  • 你想在索引 1 上更新哪个属性,或者你想用新的 json 替换索引 1。
  • 我想更新名称属性...并且新名称 必须 不同于数组中其他地址的名称(示例中的索引 0 和 2 )。

标签: mongodb


【解决方案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 查找记录,仅当数组不包含新名称时才更新它。

【讨论】:

    猜你喜欢
    • 2014-04-09
    • 2017-05-31
    • 2019-10-12
    • 1970-01-01
    • 2015-02-10
    • 2019-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多