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

MongodbAggregation Framework

Mongodb Problem Overview


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.

Mongodb Solutions


Solution 1 - Mongodb

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSahat YalkabovView Question on Stackoverflow
Solution 1 - MongodbWiredPrairieView Answer on Stackoverflow