2015-10-30 52 views
0

我在mongo中有一个集合,并且需要创建一个带有统计数字的查询,例如按名称注册的数字以及按键注册的数字,这些是真实的,等等。如何计数不同的密钥,根据其在mongo汇总中的值

{ 
    _id : 123, 
    name: capnis 
    privated: true 
}, 
{ 
    _id : 124, 
    name: capnis 
    privated: false 
}, .... 

的时候尽量不要在蒙戈查询不知道如何得到这样的结果

{name: capnis, 
total: 2, 
totalprivatedtrue:1, 
totalprivatedfalse:1 } 

在这里我得到总,但如何才能让其他?

.aggregate([ 
    {$match: {name: "$name"} }, 
    {$group: {_id:"$name", total: {$sum:1} } } 
]) 

回答

1

应用$cond运营商在$group管道步骤评估基础上,privated场数,类似如下:

db.collection.aggregate([  
    { 
     "$group": { 
      "_id": "$name",    
      "total": { 
       "$sum": 1 
      }, 
      "totalprivatedtrue": { 
       "$sum": { 
        "$cond": [ "$privated", 1, 0 ] 
       } 
      }, 
      "totalprivatedfalse": { 
       "$sum": { 
        "$cond": [ { "$eq": [ "$privated", false ] }, 1, 0 ] 
       } 
      } 
     } 
    } 
]) 
相关问题