PHP MongoDB SUM所有列

时间:2014-07-10 02:41:47

标签: php mongodb mongodb-query aggregation-framework

无论如何,MongoDB聚合框架是否可用于汇总所有列或列数组而不仅仅是一列?

每行都有一个'类别ID'。我希望按特定的类别ID进行过滤,然后输出一行,即每列的总和。因为我不需要所有列,所以如果我可以指定列来提高性能会更好。

我已经看过使用1列完成此操作的示例,但不包含多列。

以下是示例数据

{ "type" : "A", "a" : 1,  "b" : 2,  "c" : 3, "d" : 4 }
{ "type" : "A", "a" : 10, "b" : 20, "c" : 30, "d" : 40 }
{ "type" : "B", "a" : 1,  "b" : 2,  "c" : 3, "d" : 4 }
{ "type" : "B", "a" : 10, "b" : 20, "c" : 30, "d" : 40 }

因此,当类型为B时,结果为

{ "type" : "B", "a" : 11, "b" : 22, "c" : 33, "d" : 44 }

可以看出,每个列都已经汇总,并返回一行,每列的总和。

我正在使用PHP和最新版本的MongoDB和Debian

由于

1 个答案:

答案 0 :(得分:2)

我们没有您的数据作为一个明确的示例,但您似乎基本上在寻找$add运算符"添加"一起提供的值列表。所以给出了一份文件样本:

{ "type" : "A", "a" : 1,  "b" : 2,  "c" : 3, "d" : 4 }
{ "type" : "A", "a" : 10, "b" : 20, "c" : 30, "d" : 40 }
{ "type" : "B", "a" : 1,  "b" : 2,  "c" : 3, "d" : 4 }
{ "type" : "B", "a" : 10, "b" : 20, "c" : 30, "d" : 40 }

这个例子是"添加"所有"列"一起为" a"," b"和" c"只要。同样按"分组":

db.collection.aggregate([
    { "$group": {
        "_id": "$type",
        "total": { "$sum": { "$add": [ "$a", "$b", "$c" ] } }
    }}
])

如果您不需要$add或正在处理其他级别的数据,您也可以将$project$group一起使用。

此数据的结果将是:

{ "_id" : "B", "total" : 66 }
{ "_id" : "A", "total" : 66 }

您实际要问的是,每列只需$sum

db.collection.aggregate([
    { "$group": {
        "_id": "$type",
        "a": { "$sum": "$a" },
        "b": { "$sum": "$b" },
        "c": { "$sum": "$c" },
        "d": { "$sum": "$d" }
    }}
])

产生:

{ "_id" : "B", "a" : 11, "b" : 22, "c" : 33, "d" : 44 }
{ "_id" : "A", "a" : 11, "b" : 22, "c" : 33, "d" : 44 }