Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MongoDB对所有列求和_Php_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

PHP MongoDB对所有列求和

PHP MongoDB对所有列求和,php,mongodb,mongodb-query,aggregation-framework,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

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和Debian的最新版本MongoDB


谢谢

我们没有您的数据作为一个清晰的示例,但您似乎基本上是在寻找将提供的值列表“添加”在一起的运算符。因此,给出一份文件样本:

{ "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”将所有“列”一起“添加”。也按“类型”分组:

如果不需要或正在以其他方式处理不同级别的数据,也可以使用with

该数据的结果将是:

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

实际上,您所问的只是为每一列做一个测试:

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 }

你能提供一个例子来说明你的数据和你想要的结果吗?请用JSON格式。对不起,我的问题模棱两可。。。我已经更新了一个例子对不起。。走开了---但那看起来正是我想要的。。。我现在就测试一下,让你知道。。。。感谢您还应该注意,上面的解决方案似乎返回ok,但为空result@user1641165对我有用。你是如何引用PHP的?请注意,您需要像“$a”这样的内容,而不是“$a”,它将进行插值。是的。。。你是对的。。。。您的解决方案确实有效。。。我犯了一个错误。我先用终端测试您的解决方案,因为它不是为PHP设计的。我只得到一个总数,但我想为每一个总数3columns@user1641165这就是为什么例子对你的问题很重要。这只是简单的$sum聚合。
{ "_id" : "B", "a" : 11, "b" : 22, "c" : 33, "d" : 44 }
{ "_id" : "A", "a" : 11, "b" : 22, "c" : 33, "d" : 44 }