Je joue avec MongoDB en essayant de comprendre comment faire un simple
SELECT province, COUNT(*) FROM contest GROUP BY province
Mais je n'arrive pas à le comprendre en utilisant la fonction d'agrégation. Je peux le faire en utilisant une syntaxe de groupe vraiment étrange
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++;
}
});
Mais existe-t-il un moyen plus simple / plus rapide d'utiliser la fonction d'agrégation?
"errmsg" : "exception: A pipeline stage specification object must contain exactly one field.",
?{ $sort: { count: -1 } }
J'ai besoin d'une opération supplémentaire basée sur le résultat de la fonction d'agrégation. Enfin, j'ai trouvé une solution pour la fonction d'agrégation et l'opération basée sur le résultat dans MongoDB. J'ai une collection
Request
avec champrequest, source, status, requestDate
.Groupe de champs unique par et nombre:
Groupes de champs multiples par et nombre:
Grouper plusieurs champs par et compter avec tri à l'aide du champ:
Plusieurs champs Group By & Count avec Tri en utilisant Count:
la source
Si vous avez besoin de plusieurs colonnes pour regrouper, suivez ce modèle. Ici, je mène un décompte par
status
ettype
:la source
De plus, si vous devez restreindre le regroupement, vous pouvez utiliser:
la source
À partir de MongoDB 3.4, vous pouvez utiliser l'
$sortByCount
agrégation.https://docs.mongodb.com/manual/reference/operator/aggregation/sortByCount/
Par exemple:
la source
$sortByCount
s'agit en fait d'un "pseudo opérateur" comme plusieurs autres opérateurs d'étape d'agrégation introduits à partir de MongoDB 3.4. Tout ce qu'ils font vraiment, c'est d' étendre leurs étapes d'agrégation respectives. Dans ce cas, un$group
avec$sum: 1
comme indiqué dans les réponses existantes et une$sort
étape supplémentaire . Ils n'offrent aucun avantage autre que "taper moins de code" , qui peut ou non être plus descriptif (si vous êtes dans ce genre de choses). À mon humble avis, les étapes distinctes$group
et$sort
dans le code sont beaucoup plus descriptives et en fait plus flexibles.Ce type de requête a fonctionné pour moi:
Voir http://docs.mongodb.org/manual/tutorial/aggregation-with-user-preference-data/
la source
Commande shell Mongo qui a fonctionné pour moi:
la source