MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongodb-Aggregationsframework | Gruppieren über mehrere Werte?

OK, die Lösung besteht also darin, einen aggregierten Schlüssel für den _id-Wert anzugeben. Dies ist hier dokumentiert als:

Sie können ein einzelnes Feld aus den Dokumenten in der Pipeline, einen zuvor berechneten Wert oder einen aggregierten Schlüssel angeben, der aus mehreren eingehenden Feldern besteht.

Aber es definiert nicht wirklich das Format für einen aggregierten Schlüssel. Beim Lesen der früheren Dokumentation hier sah ich, dass die vorherige Methode collection.group mehrere Felder annehmen konnte und dass dieselbe Struktur im neuen Framework verwendet wird.

Um also mehrere Felder zu gruppieren, könnten Sie _id : { success:'$success', responseCode:'$responseCode', label:'$label'} verwenden

Wie in:

resultsCollection.aggregate(
{ $match : { testid : testid} },
{ $skip : alreadyRead },
{ $project : {
        timeStamp : 1 ,
        label : 1,
        responseCode : 1 ,
        value : 1,
        success : 1
    }},
{ $group : {
        _id :  { success:'$success', responseCode:'$responseCode', label:'$label'},
        max_timeStamp : { $timeStamp : 1 },
        count_responseCode : { $sum : 1 },
        avg_value : { $sum : "$value" },
        count_success : { $sum : 1 }
    }}
);