web-dev-qa-db-fra.com

Comment agréger une somme dans MongoDB pour obtenir un compte total?

Pour certaines collections avec un champ { wins: Number }, comment utiliser MongoDB Aggregation Framework pour obtenir le nombre total de gains pour tous les documents d'une collection?

Exemple:

Si j'ai 3 documents avec wins: 5, wins: 8, wins: 12 respectivement, comment utiliser MongoDB Aggregation Framework pour renvoyer le nombre total, c.-à-d. total: 25.

55
Sahat Yalkabov

Somme

Pour obtenir la somme d’un champ groupé lors de l’utilisation de Aggregation Framework de MongoDB, vous devez utiliser $group et $sum:

db.characters.aggregate([ { 
    $group: { 
        _id: null, 
        total: { 
            $sum: "$wins" 
        } 
    } 
} ] )

Dans ce cas, si vous voulez obtenir la somme de tout le wins, vous devez vous référer au nom du champ en utilisant le $ syntaxe en tant que $wins qui récupère simplement les valeurs du champ wins à partir des documents groupés et les additionne.

Compter

Vous pouvez aussi sum autres valeurs en transmettant une valeur spécifique (comme vous l'avez fait dans votre commentaire). Si tu avais

{ "$sum" : 1 },

ce serait en fait un compte de tous les wins, plutôt qu'un total.

130
WiredPrairie