2016-10-18 6 views
0

次のようにように私は私のデシベルでJSONオブジェクトを持っている:グループの集計方法とマングースのカウント方法

{ 
'name':'test1', 
'game':'cric' 
}, 

{ 
'name':'test1', 
'game':'cric' 
}, 

{ 
'name':'test1', 
'game':'football' 
}, 

{ 
'name':'test2' 
'game':'football' 
} 

私は

{ 
    'name':'test1' 
    'game':[{cric: 2}, {football:1}], 
    'totalCount': 3 
    } 

私はそのために集計クエリを使用し、次のように出力を取得しようとしています。

group {'_id':{name:'$name'}, {game:{$addToSet:$game}} 
project {name : $name, game: $game} 

私は今、私はどのように私は、ゲームの数を得ることができる、という疑問を持っている

{name: 'test1', 'game':[cric, football]} 

として出力を得ました。クリケットの現在の例は2であり、サッカー1ではtest1のユーザ

答えて

1

同様の質問はansweredここにあります。あなたの特定のケースについては

それは次のようになります。

db.collection.aggregate([ 
    { 
    $group: { 
     _id: { name: "$name", game: "$game" }, 
       games: { "$push": "$game" }, 
     total: { "$sum": 1 } 
    } 
    }, 
    { 
    $group: { 
     _id: { name: "$_id.name" }, 
     games: { $addToSet: { game: "$_id.game", sum:"$total" } } 
    } 
    } 
]) 

そして結果は次のようになります。ここでは

{ 
    "result" : [ 
     { 
      "_id" : { 
       "name" : "test1" 
      }, 
      "games" : [ 
       { 
        "game" : "cric", 
        "sum" : 2 
       }, 
       { 
        "game" : "football", 
        "sum" : 1 
       } 
      ] 
     }, 
     { 
      "_id" : { 
       "name" : "test2" 
      }, 
      "games" : [ 
       { 
        "game" : "football", 
        "sum" : 1 
       } 
      ] 
     } 
    ], 
    "ok" : 1 
} 
+0

に私の解決策であります私達は総数を得ることができますか? –

1

test1の名レコード

方法
db.getCollection('COLLECTION_NAME').aggregate([ 
     {$match : {name : "test1"}}, 
     { 
     $group: { 
     _id: "$game" , 
     total: { "$sum": 1 }, 
     name : {$first : "$name"} 
     } 
     }, 
     { 
     $group: { 
     _id : "$name", 
     games: { $addToSet: { game: "$_id", sum:"$total" } }, 
     totalCount : {$sum : "$total"} 
     } 
    } 
    ]) 
関連する問題