mongodb - 更新 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 未定义”
我应该如何编写脚本
- 更新
address.fullName = address.addressLine1
- 不要重写整个对象和子对象地址(重要)
解决方案
按照 MongoDB 文档中的这个示例,您的更新应该包装在这样的数组中。
db.getCollection('suppliers').updateMany(
{},
[
{
$set: {
'address.fullName': '$address.addressLine1',
},
},
],
{
multi: false,
upsert: false,
}
);
在MongoDB Playground上查看一个工作示例
推荐阅读
- javascript - 绕过浏览器 URL 编码以从查询参数中反射 XSS
- html - Googlelabs 暗模式切换
- c++ - 类型检查模板参数的编译器错误
- java - 在每个第 n 个分隔符处拆分,并保留字符
- flutter - 需要访问 2 个集合的 Flutter、Firestore 和 FutureBuilder
- typescript - 如何使用 NavigationHelpersCommon 键入检查 ReactNavigation 的导航?
- sql - 如何将整个列的数据类型从数字转换为雪花中的时间戳
- reactjs - 反应创建自定义事件
- c++ - Qt:为什么 QUdp 套接字不接收数据报?
- python-3.x - 将 SQL 代码转换为 PySpark 的问题;我在哪里用 groupby 和 count 创建一个新的 DF