gpt4 book ai didi

MongoDB数组聚合

转载 作者:IT老高 更新时间:2023-10-28 13:23:23 24 4
gpt4 key购买 nike

我有两个这样的文件

{ "_id" : ObjectId("552cd26276b783ed66031cc4"), "vals" : [  2,  3,  4,  5 ] }
{ "_id" : ObjectId("552cd26e76b783ed66031cc5"), "vals" : [ 1, 2, 3, 4 ] }

我需要这两个列表的总和

预期输出:

[3, 5, 7, 9]

即 [2+1, 3+2, 4+3, 5+4]

我什至不确定这在 MongoDB 中是否可行。这有什么亮点吗?

最佳答案

只是为了更新。这在即将发布的 mongoDB 3.2 中的聚合框架中是可能的。他们添加了一个新功能,用于在 mongoDB 聚合的 $unwind 阶段获取数组的展开索引,称为 includeArrayIndex。 .

使用此功能,您可以使用以下形式的聚合查询:

db.collection.aggregate(
{$unwind: { path: "$vals", includeArrayIndex: "arrayIndex" }},
{$group: { '_id': '$arrayIndex', sum : {$sum: '$vals'}}},
{$sort: { '_id': 1 }},
{$group : { '_id': null, valSum: {$push: '$sum'}}}
)

解释:

  • 展开操作展开 vals 数组并投影展开的数组索引。所以我们的想法是对相似的索引进行分组,以便我们可以总结它们
  • 然后我们在对 vals 元素求和时根据 arrayIndex 进行分组。在这个阶段我们已经完美的总结了对应的索引元素
  • 接下来我们根据arrayIndex进行排序,为最终结果数组做准备
  • 接下来我们将所有文档分组并将总和推送到一个名为 valSum 的数组中

输出:

{ '_id': null, valSum: [3, 5, 7, 9] }

这种方法的主要优点是,您不需要具有相同长度的数组。它也可以接受任意数量的输入文档。感谢 includeArrayIndex功能。

干杯!

关于MongoDB数组聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29624684/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com