Table of Contents
MongoDB allows you to group documents by a certain field and get the count of documents for each group. This is done using the $group stage in the aggregation pipeline. This can be used to get the count of documents with matching fields, or to find the average, maximum, or minimum values for a certain field in a collection of documents.
You can use the following syntax to group by and count in MongoDB:
db.collection.aggregate([ {$group : {_id:"$field_name", count:{$sum:1}}} ])
Note that field_name is the field you’d like to group by.
The following examples show how to use this syntax with a collection teams with the following documents:
db.teams.insertOne({team: "Mavs", position: "Guard", points: 31}) db.teams.insertOne({team: "Spurs", position: "Guard", points: 22}) db.teams.insertOne({team: "Rockets", position: "Center", points: 19}) db.teams.insertOne({team: "Warriors", position: "Forward", points: 26}) db.teams.insertOne({team: "Cavs", position: "Guard", points: 33})
Example 1: Group By and Count
We can use the following code to group by the ‘position’ field and count the occurrences of each position.
db.teams.aggregate([ {$group : {_id:"$position", count:{$sum:1}}} ])
This returns the following results:
{ _id: 'Forward', count: 1 } { _id: 'Guard', count: 3 } { _id: 'Center', count: 1 }
This tells us:
- The position ‘Forward’ occurs 1 time.
- The position ‘Guard’ occurs 3 times.
- The position ‘Center’ occurs 1 time.
Example 2: Group By and Count (Then Sort)
We can use the following code to count the occurrences of each position and automatically sort the results in ascending order:
db.teams.aggregate([ {$group : {_id:"$position", count:{$sum:1}}}, {$sort: {count:1}} ])
This returns the following results:
{ _id: 'Forward', count: 1 } { _id: 'Center', count: 1 } { _id: 'Guard', count: 3 }
db.teams.aggregate([ {$group : {_id:"$position", count:{$sum:1}}}, {$sort: {count:-1}} ])
This returns the following results:
{ _id: 'Guard', count: 3 } { _id: 'Forward', count: 1 } { _id: 'Center', count: 1 }
Note: You can find the complete documentation for $group .
The following tutorials explain how to perform other common operations in MongoDB: