首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分组数据的汇总计数

分组数据的汇总计数
EN

Stack Overflow用户
提问于 2017-06-12 05:15:28
回答 1查看 466关注 0票数 2

我有发票号码的文件和我指定发票类型的子文件。

代码语言:javascript
复制
{  
    "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的总和,如下所示

代码语言:javascript
复制
{  
    "inum" : "001", 
    "value" : 13420, 
    "section" : { 
        "B2C" : false, 
        "B2B" : true
    } 
},
{  
    "inum" : "034",
    "date" : "22-May-2017",
    "value" : 80500, 
    "section" : { 
        "B2C" : true, 
        "B2B" : false
    } 
}

现在我要统计分组后不同区段类型的发票总数,如上面的发票编号。有B2B & B2C部分,所以它应该给我

代码语言:javascript
复制
{"b2b":1,"b2c":1}

上面,我可以为所有部分创建函数,但我不想为个人创建函数,我希望mongodb查询能够获得所有部分的计数。

我做了下面的事

代码语言:javascript
复制
{
               $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}分组后计数

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-12 06:13:10

你想要“两个”$group阶段。一个在对"inum“进行分组时使用$first作为”节“,另一个在null上使用实际的$sum进行分组

代码语言:javascript
复制
[
 { "$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值。所以不需要用额外的比较来强迫布尔值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44491829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档