How to aggregate sum in MongoDB to get a total count?

Sahat Yalkabov picture Sahat Yalkabov · Jun 11, 2013 · Viewed 89.9k times · Source

For some collection with a field { wins: Number }, how could I use MongoDB Aggregation Framework to get the total number of wins across all documents in a collection?

Example:

If I have 3 documents with wins: 5, wins: 8, wins: 12 respectively, how could I use MongoDB Aggregation Framework to return the total number, i.e. total: 25.

Answer

WiredPrairie picture WiredPrairie · Jun 11, 2013

Sum

To get the sum of a grouped field when using the Aggregation Framework of MongoDB, you'll need to use $group and $sum:

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

In this case, if you want to get the sum of all of the wins, you need to refer to the field name using the $ syntax as $wins which just fetches the values of the wins field from the grouped documents and sums them together.

Count

You can sum other values as well by passing in a specific value (as you'd done in your comment). If you had

{ "$sum" : 1 },

that would actually be a count of all of the wins, rather than a total.