让我们假设以下文件
{
"companies": [
{"id": 1, "name": "Company 1", "new_name": "New company 1"},
{"id": 2, "name": "Company 2", "new_name": "New company 2"}
]
}
有没有办法我可以自己引用数组元素以迁移到方案
{
"companies": [
{"id": 1, "name": "New company 1", "new_name": "New company 1"},
{"id": 2, "name": "New company 2", "new_name": "New company 2"}
]
}
在一次调用update
中而不用mongo 4.2中的forEach
编写脚本?
像
update(
...
{
"companies.$[].name": "$companies.<???>.new_name"
}
)
答案 0 :(得分:1)
要在查询中访问另一个字段的值,您需要使用聚合,并利用在MongoDB版本4.2
中引入的.update()中执行聚合管道的优势,请尝试以下查询:
update(
...
[
{
$addFields: { // will replace existing field with new value
companies: {
$map: { // Iterates on an array & creates a new one
input: "$companies",
in: { $mergeObjects: [ "$$this", { name: "$$this.new_name" } ] } // `mergeObjects` will merge two objects `name` field will be replace in current object i.e; `$$this`
}
}
}
}
]
)
测试::您可以在此处测试聚合管道:mongoplayground
注意::似乎仅在一次调用中使用聚合是这样做的选择,但不利之处可能仅在于您的数组太大,因为$map
必须重写整个阵列再次。