2017-12-13 5 views
1

私は各社のすべてのイベントの合計を取得したいと思います。ここに私のデータは次のとおりです。複数のグループがマングースを使用しています

{company: "1" event:"a"} 
{company: "1" event:"b"} 
{company: "1" event:"c"} 
{company: "2" event:"b"} 
{company: "2" event:"b"} 
{company: "3" event:"c"} 
{company: "3" event:"c"} 

私は現在、イベントの日付を集約するためにこれを持っていますが、私は会社によってさらにグループにそれらを苦労しています:

これらの結果をレンダリングする
{ 
    "aggregate": [ 

    { 
     "$group": { 
     "_id": "$event", 
     "count": {"$sum": 1} 
     } 
    }, 
    {"$sort": {"_id": 1}} 
    ] 
} 

【 { "_id": "A"、 "カウント":1 }、{ "_id": "B"、 "カウント":3 }、 { "_id": "C"、 "カウント":

[{ 
     "_id": { 
      "company" :"1", 
      "events": [ 
       { 
        "event": "a", 
        "count": 1 
       }, 
       { 
        "event": "b", 
        "count": 1 
       }, 
       { 
        "event": "c", 
        "count": 1 
       }, 
      ] 
     } 
    }, 
    { 
     "_id": { 
      "company" :"2", 
      "events": [ 
       { 
        "event": "b", 
        "count": 2 
       } 
      ] 
     } 
    }, 
    { 
     "_id": { 
      "company" :"3", 
      "events": [ 
       { 
        "event": "c", 
        "count": 2 
       } 
      ] 
     } 
    } 
    ] 
:イベントはの線に沿って何かを生産する会社で、私はさらにグループをカウントすることができますどのように2 }]

私はすべての種類のさらなるグループをクエリで試しましたが、後のデータを生成することはできません。 1つの注意点もあります。サーバー側の処理やスキーマの変更ができないため、私は実行可能なクエリを渡すことしかできません。

答えて

1
db.collection.aggregate([ 
{ 
    $group:{ 
    _id:{company:"$company",event:"$event"}, 
    count:{$sum:1} 
    } 
}, 
{ 
    $group:{ 
    _id:"$_id.company", 
    events:{$push:{event:"$_id.event",count:"$count"}} 
    } 
} 
]) 

、uはあなたが言及した、まったく同じ出力が必要な場合は、その後

$プロジェクトのように$プロジェクト段階を追加します。{_ ID:{会社: "$ _ ID"、イベント: "$イベント"}}

+0

すばらしいことに感謝します。最初のグループはパースするグループを設定し、次のグループは各企業がイベントIDでその会社とグループのイベントをプッシュしてカウントを取得する – Dezza

関連する問題