$count (aggregation)
Definition
$countPasses a document to the next stage that contains a count of the number of documents input to the stage.
Note
Disambiguation
This page describes the
$countaggregation pipeline stage. For the$countaggregation accumulator, see$count (aggregation accumulator).
Compatibility
You can use $count for deployments hosted in the following
environments:
MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud
MongoDB Enterprise: The subscription-based, self-managed version of MongoDB
MongoDB Community: The source-available, free-to-use, and self-managed version of MongoDB
Syntax
$count has the following syntax:
{ $count: <string> }
<string> is the name of the output field which has the count
as its value. <string> must be a non-empty string, must not
start with $ and must not contain the . character.
Behavior
The $count stage is equivalent to the following
$group and $project sequence:
db.collection.aggregate( [ { $group: { _id: null, myCount: { $sum: 1 } } }, { $project: { _id: 0 } } ] )
myCount is the output field that stores the count.
You can specify another name for the output field.
If the input dataset is empty, $count doesn't return a result.
See also:
db.collection.countDocuments() which wraps the
$group aggregation stage with a $sum expression.
Examples
Create a collection named scores with these documents:
db.scores.insertMany( [ { "_id" : 1, "subject" : "History", "score" : 88 }, { "_id" : 2, "subject" : "History", "score" : 92 }, { "_id" : 3, "subject" : "History", "score" : 97 }, { "_id" : 4, "subject" : "History", "score" : 71 }, { "_id" : 5, "subject" : "History", "score" : 79 }, { "_id" : 6, "subject" : "History", "score" : 83 } ] )
The following aggregation operation has two stages:
The
$matchstage excludes documents that have ascorevalue of less than or equal to80to pass along the documents withscoregreater than80to the next stage.The
$countstage returns a count of the remaining documents in the aggregation pipeline and assigns the value to a field calledpassing_scores.
db.scores.aggregate( [ { $match: { score: { $gt: 80 } } }, { $count: "passing_scores" } ] )
The operation returns this result:
{ "passing_scores" : 4 }
If the input dataset is empty, $count doesn't return a result. The
following example doesn't return a result because there are no documents
with scores greater than 99:
db.scores.aggregate( [ { $match: { score: { $gt: 99 } } }, { $count: "high_scores" } ] )
The C# examples on this page use the sample_mflix database
from the Atlas sample datasets. To learn how to create a
free MongoDB Atlas cluster and load the sample datasets, see
Get Started in the MongoDB .NET/C#
Driver documentation.
The following Movie class models the documents in the sample_mflix.movies
collection:
public class Movie { public string Id { get; set; } public int Runtime { get; set; } public string Title { get; set; } public string Rated { get; set; } public List<string> Genres { get; set; } public string Plot { get; set; } public ImdbData Imdb { get; set; } public int Year { get; set; } public int Index { get; set; } public string[] Comments { get; set; } [] public DateTime LastUpdated { get; set; } }
To use the MongoDB .NET/C# driver to add a $count stage to an aggregation
pipeline, call the Count() method on a PipelineDefinition object.
The following example creates a pipeline stage that counts the number of input documents and returns a document with the count as its value:
var pipeline = new EmptyPipelineDefinition<Movie>() .Count();