Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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
Arrays MongoDB GroupBy子数组但与父数组求和_Arrays_Mongodb_Group By_Sum - Fatal编程技术网

Arrays MongoDB GroupBy子数组但与父数组求和

Arrays MongoDB GroupBy子数组但与父数组求和,arrays,mongodb,group-by,sum,Arrays,Mongodb,Group By,Sum,假设我有: [ {ProjectId: "1", PriceSold: 100, Item: {Name: "Package1", Specs: ["A", "B"]} } , {ProjectId: "2", PriceSold: 500, Item: {Name: "Package10", Specs: ["A", "C"]} } , {ProjectId: "3", PriceSold: 900, Item: {Name: "Package100", Specs: ["D", "E"]}

假设我有:

[
{ProjectId: "1", PriceSold: 100, Item: {Name: "Package1", Specs: ["A", "B"]} } ,
{ProjectId: "2", PriceSold: 500, Item: {Name: "Package10", Specs: ["A", "C"]} } ,
{ProjectId: "3", PriceSold: 900, Item: {Name: "Package100", Specs: ["D", "E"]} } ,
{ProjectId: "4", PriceSold: 50, Item: {Name: "Package90", Specs: ["F"]} } ,
]
我想做一个GroupBySpecs,但总的价格是卖出的。结果将是:

[
{Spec: "A", Total: 600},
{Spec: "B", Total: 100},
{Spec: "C", Total: 500},
{Spec: "D", Total: 900},
{Spec: "E", Total: 900},
{Spec: "F", Total: 50},
]
我尝试的任何聚合都会返回规范组,而不是项,并且总和不起作用。第一次尝试:

db.ClientProject.aggregate([

{ "$group" : { "_id" : "$Item.Specs", "__agg0" : { "$sum" : "$PriceSold" } } }, 

{ "$project" : { "GroupId" : "$_id", "GroupSum" : "$__agg0", "_id" : 0 } }

])
第二次尝试正确计算,但我无法计算售出价格的总和

db.ClientProject.aggregate([

{ "$unwind" : "$Item.Specs" }, 

{ "$project" : { "Specs" : "$Item.Specs", "_id" : 0 } }, 

{ "$group" : { "_id" : "$Specs", "__agg0" : { "$sum" : 1 } } }, 

{ "$project" : { "GroupId" : "$_id", "GroupSum" : "$__agg0", "_id" : 0 } }])
请试试这个:

db.ClientProject.aggregate([{$project : {PriceSold: 1, 'Item.Specs':1}}, {$unwind : '$Item.Specs'},
{$group : {_id : '$Item.Specs', Total: {$sum : '$PriceSold'}}}])

注意:一般来说,在整个集合上使用$unwind并没有那么有效,在小型数据集上使用$unwind可能是一个好主意,可能是在过滤集合之后,比如$match之后,所以我们这里没有这个选项,至少使用$project使文档具有更少的字段来处理

您的答案的好处在于您相信可以提供优化的查询。@srinivazy数组是正确的,但总和不起作用。。。为每个结果返回0…@2Fast4YouBR:这对我有效-对于提供的示例,您是否检查了字段名称?它的值的类型是数据库中与此查询匹配的数字?