Count Documents
Overview
In this guide, you can learn how to get an accurate and estimated count of the number of documents in your collection.
Sample Data
To run the examples in this guide, load the sample data into the tea.ratings
collection with the following
snippet:
coll := client.Database("tea").Collection("ratings") docs := []interface{}{ bson.D{{"type", "Masala"}, {"rating", 10}}, bson.D{{"type", "Matcha"}, {"rating", 7}}, bson.D{{"type", "Assam"}, {"rating", 4}}, bson.D{{"type", "Oolong"}, {"rating", 9}}, bson.D{{"type", "Chrysanthemum"}, {"rating", 5}}, bson.D{{"type", "Earl Grey"}, {"rating", 8}}, bson.D{{"type", "Jasmine"}, {"rating", 3}}, bson.D{{"type", "English Breakfast"}, {"rating", 6}}, bson.D{{"type", "White Peony"}, {"rating", 4}}, } result, err := coll.InsertMany(context.TODO(), docs) if err != nil { panic(err) } fmt.Printf("Number of documents inserted: %d\n", len(result.InsertedIDs))
Tip
Non-existent Databases and Collections
If the necessary database and collection don't exist when you perform a write operation, the server implicitly creates them.
Each document contains a rating for a type of tea that corresponds to
the type
and rating
fields.
Accurate Count
To count the number of documents that match your query filter, use the
CountDocuments()
method.
Tip
If you pass an empty query filter, this method returns the total number of documents in the collection.
Modify Behavior
You can modify the behavior of CountDocuments()
by passing in a
CountOptions
type. If you don't specify any options, the driver uses
its default values.
The CountOptions
type allows you to configure options with the
following methods:
Method | Description |
---|---|
SetCollation() | The type of language collation to use when sorting results. Default: nil |
SetHint() | The index to use to scan for documents to count. Default: nil |
SetLimit() | The maximum number of documents to count. Default: 0 |
SetMaxTime() | The maximum amount of time that the query can run on the server. Default: nil |
SetSkip() | The number of documents to skip before counting. Default: 0 |
Example
The following example counts the number of documents where the
rating
is less than 6
:
filter := bson.D{{"rating", bson.D{{"$lt", 6}}}} count, err := coll.CountDocuments(context.TODO(), filter) if err != nil { panic(err) } fmt.Printf("Number of ratings less than six: %d\n", count)
Aggregation
You can also include the $count stage to count the number of documents in an aggregation pipeline.
Example
The following example performs the following actions:
Counts the number of documents where the
rating
is greater than5
Assigns the count to a field called
total_documents
matchStage := bson.D{{"$match", bson.D{{"rating", bson.D{{"$gt", 5}}}}}} countStage := bson.D{{"$count", "total_documents"}} cursor, err := coll.Aggregate(context.TODO(), mongo.Pipeline{matchStage, countStage}) if err != nil { panic(err) } var results []bson.D if err = cursor.All(context.TODO(), &results); err != nil { panic(err) } for _, result := range results { fmt.Println(result) }
Estimated Count
To estimate the number of documents in your collection, use the
EstimatedDocumentCount()
method.
Note
The EstimatedDocumentCount()
method is quicker than the
CountDocuments()
method because it uses the collection's
metadata rather than scanning the entire collection.
Modify Behavior
You can modify the behavior of EstimatedDocumentCount()
by passing
in an EstimatedDocumentCountOptions
type. If you don't specify any
options, the driver uses its default values.
The EstimatedDocumentCountOptions
type allows you to configure
options with the following methods:
Method | Description |
---|---|
SetMaxTime() | The maximum amount of time that the query can run on the server. Default: nil |
Example
The following example estimates the number of documents in the
ratings
collection:
count, err := coll.EstimatedDocumentCount(context.TODO()) if err != nil { panic(err) } fmt.Printf("Estimated number of documents in the ratings collection: %d\n", count)
Additional Information
To learn more about the operations mentioned, see the following guides:
API Documentation
To learn more about any of the methods or types discussed in this guide, see the following API Documentation: