我有一个包含这样数据的集合:
{
"items": [
{
"product": {
"name": "prod1",
"price": {
"pledge": 1,
"cost": 19
}
}
},
{
"product": {
"name": "prod2",
"price": {
"pledge": 2,
"cost": 10
}
}
}
]
}
我想更新整个集合,让它们像这样:
{
"items": [
{
"product": {
"name": "prod1",
"price": {
"pledge": 1,
"deposit": 1,
"cost": 19
}
}
},
{
"product": {
"name": "prod2",
"price": {
"pledge": 2,
"deposit": 2,
"cost": 10
}
}
}
]
}
对于商品中的每个价格,我想在数组的该元素中添加一个名为
deposit
的新字段,其值为 pledge
。
我怎样才能以优化的方式做到这一点?
您应该需要使用聚合管道更新查询来引用该字段。
$map
- 迭代 items
数组中的元素1.1。
$mergeObjects
- 将当前迭代对象与具有 price
字段的文档合并。
1.1.1。
$mergeObjects
- 将 product.price
对象与引用 deposit
值的 product.price.pledge
字段的文档合并。
db.collection.update({},
[
{
$set: {
items: {
$map: {
input: "$items",
in: {
product: {
$mergeObjects: [
"$$this.product",
{
"price": {
$mergeObjects: [
"$$this.product.price",
{
deposit: "$$this.product.price.pledge"
}
]
}
}
]
}
}
}
}
}
}
])