mongodb - 使用另一个字段的值更新 MongoDB 数组字段值
问题描述
我知道可以更新特定的数组元素,如此处所述: https ://docs.mongodb.com/manual/reference/operator/update/positional-filtered/
另外,我知道可以使用字段值来更新另一个字段的值,如下所述:使用另一个字段的值更新 MongoDB 字段
我需要的是两者的结合。
假设我在数据库中有这个:
{
a: [
{
aa: 10
},
{
cc: 15
}
]
}
现在,我想将一个字段添加bb
到具有 ' 值的数组文档中aa
,但前提是aa
存在。所以输出是:
{
a: [
{
aa: 10,
bb: 10
},
{
cc: 15
}
]
}
我怎样才能做到这一点?
解决方案
尝试从 MongoDB 4.2 开始使用聚合管道进行更新,
- 匹配字段存在条件
$map
a
迭代数组的循环$cond
aa
如果字段不为空,则检查条件,然后添加bb
值为 的新字段aa
并使用 与当前对象合并$mergeObjects
,否则返回当前对象
db.collection.update(
{ "a.aa": { $exists: true } },
[{
$set: {
a: {
$map: {
input: "$a",
in: {
$cond: [
{ $ne: ["$$this.aa", null] },
{ $mergeObjects: ["$$this", { bb: "$$this.aa" }] }
"$$this",
]
}
}
}
}
}],
{ multi: true }
)
推荐阅读
- java - 为什么 pack() 不能双向调整大小(放大和缩小) - Swing
- django - DRF post请求多个内部序列化器
- c# - Xamarin Forms iOS 应用程序在启动时突然崩溃
- php - 谷歌云存储 500 内部服务器错误
- python - 将 .tsv 文件转换为 .txt 会创建意外字符,可能修复吗?
- symfony - PHP 致命错误:未捕获的 RuntimeException:未定义 APP_ENV 环境变量
- javascript - 使用来自输入的数据更新数组
- git - 将 VSTS / Azure DevOps 中所有提交详细信息的列表导出到文件中?
- kubernetes - 无法在 minikube 上部署 debezium
- sql-server - 将 DD-MON-YYYY AM/PM 转换或转换为 YYYY-MM-DD