【问题标题】:Update MongoDb collection and not rewrite it更新 MongoDb 集合而不重写它
【发布时间】:2021-07-19 07:37:03
【问题描述】:

我有一个包含以下对象的集合:

{ 
  ...
  "address": {
    "addressLine1": "some address"
    "city": "some city"
  }
}

如果存在address,我需要更新所有对象以添加address.fullName = address.addressLine1(不要问为什么:D)。

我尝试在 Robo 3T 中运行此脚本:

db.getCollection('suppliers').updateMany(
    // query 
    {},
    
    // update 
    { $set: { address: { fullName: $address.address1 } }  },
    
    // options 
    {
        // update only one document
        "multi" : true,
        // insert a new document, if no existing document match the query
        "upsert" : false 
    }
);

我有一个错误

"$address 未定义"

我应该如何编写脚本

  1. 更新address.fullName = address.addressLine1
  2. 不要重写整个对象和子对象地址(重要)

【问题讨论】:

    标签: mongodb nosql robo3t


    【解决方案1】:

    按照 MongoDB 文档中的 example,您的更新应该包装在这样的数组中。

    db.getCollection('suppliers').updateMany(
      {},
      [
        {
          $set: {
            'address.fullName': '$address.addressLine1',
          },
        },
      ],
      {
        multi: false,
        upsert: false,
      }
    );
    

    查看MongoDB Playground上的工作示例

    【讨论】:

    • 非常感谢!
    • 不客气。考虑接受答案。 @NikitaPolevoy
    猜你喜欢
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多