我有发票号码的文件和我指定发票类型的子文件。
{
"inum" : "001",
"date" : "28-May-2017",
"value" : 10020,
"section" : {
"B2C" : false,
"B2B" : true
}
},
{
"inum" : "001",
"date" : "22-May-2017",
"value" : 3400,
"section" : {
"B2C" : false,
"B2B" : true
}
},
{
"inum" : "034",
"date" : "22-May-2017",
"value" : 80500,
"section" : {
"B2C" : true,
"B2B" : false
}
}现在,我和分组文件根据发票号码,我是分组与猫鼬查询,并得到预期的结果。所以它会给我一张发票,上面有value的总和,如下所示
{
"inum" : "001",
"value" : 13420,
"section" : {
"B2C" : false,
"B2B" : true
}
},
{
"inum" : "034",
"date" : "22-May-2017",
"value" : 80500,
"section" : {
"B2C" : true,
"B2B" : false
}
}现在我要统计分组后不同区段类型的发票总数,如上面的发票编号。有B2B & B2C部分,所以它应该给我
{"b2b":1,"b2c":1}上面,我可以为所有部分创建函数,但我不想为个人创建函数,我希望mongodb查询能够获得所有部分的计数。
我做了下面的事
{
$group: {
_id : {inum:"$inum"},
b2b: {$sum: {$cond: [{$eq:["$section.B2B", true]}, 1, 0]}},
b2c: {$sum: {$cond: [{$eq:["$section.B2C", true]}, 1, 0]}},
}
},
{$project: {_id:0}},它给我数了一下未合并的发票号码{ "b2b":2, "b2c":1 }
但是我想在数据{ "b2b":1, "b2c":1}分组后计数
发布于 2017-06-12 06:13:10
你想要“两个”$group阶段。一个在对"inum“进行分组时使用$first作为”节“,另一个在null上使用实际的$sum进行分组
[
{ "$group": {
"_id": "$inum",
"section": { "$first": "$section" }
}},
{ "$group": {
"_id": null,
"b2b": { "$sum": { "$cond": [ "$section.B2B", 1, 0 ] } },
"b2c": { "$sum": { "$cond": [ "$section.B2C", 1, 0 ] } }
}}
]第一种方法只是将“合并”作为您的请求,并且只保留找到的$first "section"数据。
后一种条件在所有文档上进行累积,因为这是null作为分组键所要做的事情。
这里的$cond语法可以缩短,唱第一个"if“条件的三元表达式实际上已经是一个”布尔“true/false值。所以不需要用额外的比较来强迫布尔值。
https://stackoverflow.com/questions/44491829
复制相似问题