J'ai des documents comme celui-ci:
{
"user": '1'
},
{ "user": '1'
},
{
"user": '2'
},
{
"user": '3'
}
J'aimerais pouvoir obtenir un ensemble de tous les différents utilisateurs et leurs comptes respectifs, triés par ordre décroissant. Donc, ma sortie serait quelque chose comme ça:
{
'1': 2,
'2': 1,
'3': 1
}
Je pense que cela peut être fait avec un agrégat Mongo (), mais j'ai beaucoup de difficulté à trouver le bon flux pour cela.
Vous pouvez obtenir un résultat (pas dans le format requis) via agrégation
db.collection.aggregate(
{$group : { _id : '$user', count : {$sum : 1}}}
).result
la sortie de vos exemples de documents est la suivante:
"0" : {
"_id" : "2",
"count" : 1
},
"1" : {
"_id" : "3",
"count" : 1
},
"2" : {
"_id" : "1",
"count" : 2
}
Pour ceux qui liront ceci en janvier 2019, la réponse acceptée ne fonctionne pas actuellement dans Robo3T (renvoie une erreur pipeline.length - 1
).
Vous devez:
a) envelopper la requête dans un jeu de crochets []
b) retirez .result
de la fin
https://github.com/Studio3T/robomongo/issues/1519#issuecomment-441348191
Voici une mise à jour de la réponse acceptée par @disposer qui fonctionne pour moi dans Robo3T.
db.getCollection('collectionName').aggregate(
[ {$group : { _id : '$user', count : {$sum : 1}}} ]
)