2016-07-28 66 views
0

我有一些數據是這樣的:MongoDB中如何計算領域

{ 
    user_id:1, 
    group_id:123, 
    discription:null 
}, 
{ 
    user_id:1, 
    group_id:321, 
    discription:null 
}, 
{ 
    user_id:1, 
    group_id:123, 
    discription:"text" 
}, 
{ 
    user_id:1, 
    group_id:321, 
    discription:"another text" 
}, 
{ 
    user_id:1, 
    group_id:321, 
    discription:"another another text" 
}, 
etc.. 

我想要得到的所有組(組由GROUP_ID),各組的文件數和數量的該組中的文件有「描述「與空值和非空值。 所以我需要類似的結果:

[ 
    [group_id:123, count:2, isNull:1, isNotNull:1], 
    [group_id:321, count:3, isNull:1, isNotNull:2] 
] 

我知道小組如何通過字段「GROUP_ID」,並獲得「數」,但我不知道如何獲取有關「說明」的信息。

db.collection.aggregate([ 
    { 
     $match:{ 
      user_id:1 
     } 
    }, 
    { 
     $group:{ 
      _id:'$group_id', 
      group_id:{$first:'$group_id'}, 
      count:{'$sum':1} 
     } 
    } 
]) 

回答

0

請檢查該查詢

db.testing.aggregate([{ 
     $match:{ 
      user_id:1 
     } 
    },  
    {$project:{_id:0,user_id:1,group_id: 1,description: { $ifNull: [ "$discription", 1 ] }}}, 
    { 
     $group:{ 
      _id:'$group_id',    
      group_count:{'$sum':1}, 
      IsNull:{"$sum":"$description"} 
     } 
    }, 
    {$project:{_id:0,group_id:"$_id", count:"$group_count", isNull:"$IsNull", isNotNull:{ $subtract:["$group_count","$IsNull"]}}} 
])