首页 > 解决方案 > 更新 MongoDb 集合而不重写它

问题描述

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

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

在存在的情况下,我需要更新所有要添加的对象address.fullName = address.addressLine1(不要问为什么:D)address

我尝试在 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. 不要重写整个对象和子对象地址(重要)

标签: mongodbnosqlrobo3t

解决方案


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

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

在MongoDB Playground上查看一个工作示例


推荐阅读