数组的按元素求和

时间:2019-04-17 13:23:09

标签: mongodb aggregation-framework

请考虑以下文档:

[
  {_id:1, values:[1, 2, 3]},
  {_id:2, values:[4, 5, 6]}
]

是否有任何优雅的方法将数组分组/求和为一个新数组,其中第n个元素是原始文档中第n个元素的总和?

{_id:null, values:[5, 7, 9]}

我可以在聚合步骤中总结特定元素:

{$group:{
    _id:null,
    Values0: {$sum:{$arrayElemAt:["$values",0]}},
    Values1: {$sum:{$arrayElemAt:["$values",1]}},
    Values2: {$sum:{$arrayElemAt:["$values",2]}}
}},

但是我无法将它们重新放入数组。同样,需要较少键入的内容也将受到高度赞赏:)。如果这不起作用,我可以在C#中遍历bson文档并以这种方式构造答案,但希望在聚合管道中使用某些内容(或mapreduce也许?还没有研究过)

1 个答案:

答案 0 :(得分:1)

您可以使用$group获取一个数组数组,然后使用$reduce处理该数组。使用$range可以生成可用于获取两个数组的每个项目(结果和当前处理的项目)的索引。索引0的值将是initialValue的{​​{1}},索引$reduce的值将在每次迭代中添加到结果中。

1...size

Mongo Playground