mongodb:聚合每个文档中包含的列表

时间:2014-08-15 12:58:18

标签: mongodb aggregation-framework nosql

我目前正在阅读the mongoDb aggregation introduction。这些示例显示了聚合操作的强大功能,例如,对集合中文档子集中的某些值求和。

我需要的实际上有点不同:我需要在集合的每个文档中包含的列表中执行相同的操作。通过这种方式,我仍然可以获得集合中包含的每个文档的元素,但是每个文档中包含的列表将通过对列表中包含的子文档中包含的某个字段求和来折叠。

MongoDB中是否可以使用正常的管道/聚合操作?

2 个答案:

答案 0 :(得分:0)

我发现$unwind运算符允许跨多个文档展开文档中包含的列表。

例如,以下查询只是将sessions列表展开为几个文档,然后可以使用这些文档进行Ts字段的聚合:

db.userStats.aggregate([
    { $match: {"u":{ "$in": [1,2,3,4,5] }}},
    { $unwind: "$sessions" },
    { $group: { _id:"$u" , total: { $sum: "$sessions.Ts"}}},
])

答案 1 :(得分:0)

听起来你想要做一个$项目,如果你喜欢将所有结果合并到一个文档中,可能会跟一个$ group。类似的东西:

db.userStats.aggregate([
    { $match: {"u":{ "$in": [1,2,3,4,5] }}},
    { $project: { total: { $sum: "$sessions.Ts"}}},
    { $group: { _id:"$u" , total: { $first: "$total" }}},
])