sql >> Base de Datos >  >> NoSQL >> MongoDB

Marco de agregación de Mongodb | ¿Agrupar sobre múltiples valores?

Bien, entonces la solución es especificar una clave agregada para el valor _id. Esto se documenta aquí como:

Puede especificar un solo campo de los documentos en la canalización, un valor calculado previamente o una clave agregada formada por varios campos entrantes.

Pero en realidad no define el formato de una clave agregada. Al leer la documentación anterior aquí, vi que el método anterior de collection.group podía tomar múltiples campos y que la misma estructura se usa en el nuevo marco.

Entonces, para agrupar varios campos, puede usar _id : { success:'$success', responseCode:'$responseCode', label:'$label'}

Como en:

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