MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Cadre d'agrégation Mongodb | Grouper sur plusieurs valeurs ?

OK, la solution consiste donc à spécifier une clé agrégée pour la valeur _id. Ceci est documenté ici comme :

Vous pouvez spécifier un seul champ parmi les documents du pipeline, une valeur précédemment calculée ou une clé agrégée composée de plusieurs champs entrants.

Mais cela ne définit pas réellement le format d'une clé agrégée. En lisant la documentation précédente ici, j'ai vu que la méthode collection.group précédente pouvait prendre plusieurs champs et que la même structure était utilisée dans le nouveau framework.

Ainsi, pour regrouper plusieurs champs, vous pouvez utiliser _id : { success:'$success', responseCode:'$responseCode', label:'$label'}

Comme dans :

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 }
    }}
);