Estoy jugando con MongoDB tratando de descubrir cómo hacer un simple
SELECT province, COUNT(*) FROM contest GROUP BY province
Pero parece que no puedo entenderlo usando la función de agregado. Puedo hacerlo usando una sintaxis grupal realmente extraña
db.user.group({
"key": {
"province": true
},
"initial": {
"count": 0
},
"reduce": function(obj, prev) {
if (true != null) if (true instanceof Array) prev.count += true.length;
else prev.count++;
}
});
¿Pero hay una manera más fácil / rápida de usar la función de agregado?
"errmsg" : "exception: A pipeline stage specification object must contain exactly one field.",
?{ $sort: { count: -1 } }
Necesito una operación adicional basada en el resultado de la función agregada. Finalmente encontré alguna solución para la función agregada y la operación basada en el resultado en MongoDB. Tengo una colección
Request
con camporequest, source, status, requestDate
.Grupo de campo único por y cuenta:
Múltiples campos Agrupar por y contar:
Múltiples campos Agrupar por y contar con Ordenar usando campo:
Múltiples campos Agrupar por y contar con Ordenar usando la cuenta:
fuente
Si necesita varias columnas para agrupar, siga este modelo. Aquí estoy realizando un conteo por
status
ytype
:fuente
Además, si necesita restringir la agrupación, puede usar:
fuente
A partir de MongoDB 3.4, puede usar la
$sortByCount
agregación.https://docs.mongodb.com/manual/reference/operator/aggregation/sortByCount/
Por ejemplo:
fuente
$sortByCount
realidad es un "pseudo operador" como varios operadores de etapa de agregación más introducidos desde MongoDB 3.4. Todo lo que realmente hacen es expandirse a sus respectivas etapas de agregación. En este caso, una$group
con$sum: 1
como se muestra en las respuestas existentes y un adicional de$sort
fase. No ofrecen otra ventaja que "escribir menos código" , que puede o no ser más descriptivo (si te gusta ese tipo de cosas). En mi humilde opinión, distintas$group
y$sort
etapas en el código son mucho más descriptivas y de hecho más flexibles.Este tipo de consulta me funcionó:
Ver http://docs.mongodb.org/manual/tutorial/aggregation-with-user-preference-data/
fuente
Comando de shell Mongo que funcionó para mí:
fuente