将所有文档减少到聚合中的数组

时间:2018-02-14 15:37:43

标签: mongodb aggregation-framework

我有一个聚合管道,它返回如下文档的集合:

ID  Date        Sale    Sale_desc   row_num
1   1/1/2017    10      book        1
1   1/1/2017    10      book        1
1   1/1/2017    10      book        1
2   1/2/2017    12      notebook    1
2   1/2/2017    12      notebook    2
3   1/3/2017    1       pen         1
3   1/3/2017    1       pen         2

但是,我想只获取一个带有属性的文档,其中包含一个包含所有这些文档的数组,如下所示:

{
    "_id" : {
        "ID" : "ID0001",
        "NAME" : "NAME0001"
    },
    "total_a" : 8.0,
    "total_b" : 2.0,
    "total_c" : 5.0,
    "total_d" : 5.0,
    "TOTAL" : 35.0
}

我知道我可以用foreach做到这一点,但是,有可能在管道中这样做吗?

1 个答案:

答案 0 :(得分:1)

您需要将另一个 $group 步骤附加到现有的汇总管道中,其中 $push 系统变量 {{3 }} 到数据字段,如下所示:

db.collection.aggregate([
   /* existing pipeline */
   {
       "$group": {
           "_id": null,
           "data": { "$push": "$$ROOT" },
           "aField": { "$sum": "$TOTAL" },
           "anotherField": { "$first": "anotherValue" }
       }
   }
])

$$ROOT 引用当前正在汇总管道阶段处理的顶级文档。