我有一个内部数组,如下所示:
[
{'name': 'foo', 'size': 1},
{'name': 'baz', 'size': 2},
/* ... */
]
我想更新一些外部字段total
,它是所有大小的总和,而无需事先查询数组。
我知道聚合范式,但不确定是否需要在这里应用它。
谢谢
答案 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 }
>