【发布时间】:2015-02-06 12:31:27
【问题描述】:
这是我要解决的问题:
- 每个文档都包含一个由 30 个整数组成的数组
- 文档在特定条件下分组(此处不相关)
- 在对它们进行分组时,我想:
- 将每个文档的数组的最后 29 个元素相加(跳过第一个元素)
- 在同一组中将之前的结果相加,并返回
数据结构很难改变,我负担不起迁移 + 我仍然需要 30 个值用于其他目的。这是我尝试过的,但没有成功:
db.collection.aggregate([
{$match: {... some matching query ...}},
{$project: {total_29_last_values: {$add: ["$my_array.1", "$my_array.2", ..., "$my_array.29"]}}},
{$group: {
... some grouping here ...
my_result: {$sum: "$total_29_last_values"}
}}
])
理论上(恕我直言)这应该可行,鉴于 $add 在 mongodb 文档中的定义,但由于某种原因它失败了:
exception: $add only supports numeric or date types, not Array
也许不支持将数组的元素相加,但这似乎很奇怪...
感谢您的帮助!
【问题讨论】:
-
请发布您收藏的示例文档。
标签: mongodb aggregation-framework