MongoDB更新查询:字段为其他字段的总和

时间:2019-01-20 19:20:52

标签: mongodb mongodb-query

我有一个内部数组,如下所示:

[
    {'name': 'foo', 'size': 1},
    {'name': 'baz', 'size': 2},
    /* ... */

]

我想更新一些外部字段total,它是所有大小的总和,而无需事先查询数组。

我知道聚合范式,但不确定是否需要在这里应用它。

谢谢

1 个答案:

答案 0 :(得分:1)

您可以将聚合管道与$out一起使用,以写入新的或现有的集合

db.t61.aggregate([
    {$addFields : {total : {$sum : "$data.size"}}},
    {$out : "t61"}
])

样本收集和汇总

> db.t61.find()
{ "_id" : ObjectId("5c44d5709d56bf65be5ab2e2"), "data" : [ { "name" : "foo", "size" : 1 }, { "name" : "baz", "size" : 2 } ] }
> db.t61.aggregate([{$addFields : {total : {$sum : "$data.size"}}},{$out : "t61"}])
> db.t61.find()
{ "_id" : ObjectId("5c44d5709d56bf65be5ab2e2"), "data" : [ { "name" : "foo", "size" : 1 }, { "name" : "baz", "size" : 2 } ], "total" : 3 }
>