2017-12-13 5 views
1

Ich will die Summe aller Ereignisse für jedes Unternehmen erhalten. Hier sind meine Daten:Multiple Gruppe mit Mongoose

{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"} 

Im Moment habe ich dies das Datum für Ereignisse aggregieren, aber ich bin zu kämpfen, um weitere Gruppe sich von Unternehmen:

{ 
    "aggregate": [ 

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

Welche diese Ergebnisse macht:

[ { "_id": "a", "count": 1 }, { "_id": "B" "count": 3 }, { "_id": "c", "count": 2 }]

Wie kann ich die Ereigniszählungen von Unternehmen weitere Gruppe etwas entlang der Linien von produzieren:

[{ 
     "_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 
       } 
      ] 
     } 
    } 
    ] 

ich habe alle möglichen weiteren Gruppen in der Abfrage versucht, aber die Daten, die ich nach bin nicht produzieren kann. Es gibt auch eine Einschränkung: Ich bin nicht in der Lage, etwas serverseitig zu bearbeiten oder das Schema zu ändern, daher kann ich nur eine Abfrage übergeben, von der ich hoffe, dass sie gemacht werden kann.

Antwort

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

Und wenn u müssen genau die gleiche Ausgabe, die Sie dann Stufe $ Projekt hinzufügen erwähnt wie

$ Projekt: {_ id: {company: "$ _ id", Veranstaltungen: "$ events"}}

+0

Tolles Zeug danke. Die erste Gruppe legt also die zu analysierenden Gruppen fest und die nächste Gruppe sagt für jedes Unternehmen, dass sie die Ereignisse für diese Firma und die Gruppe nach Ereignis-ID verschieben und die Anzahl abrufen – Dezza