$count (aggregation accumulator)
Definition
New in version 5.0.
Returns the number of documents in a group.
$count is available in these stages:
$setWindowFields(Available starting in MongoDB 5.0)
Note
Disambiguation
This page describes the $count aggregation accumulator. For
the $count aggregation pipeline stage, see
$count (aggregation pipeline).
Syntax
$count syntax:
{ $count: { } }
$count does not accept any parameters.
Behavior
$count is functionally equivalent to using { $sum : 1 }
within the $group stage.
See also:
Examples
Create a cakeSales collection that contains cake sales in the states
of California (CA) and Washington (WA):
db.cakeSales.insertMany( [ { _id: 0, type: "chocolate", orderDate: new Date("2020-05-18T14:10:30Z"), state: "CA", price: 13, quantity: 120 }, { _id: 1, type: "chocolate", orderDate: new Date("2021-03-20T11:30:05Z"), state: "WA", price: 14, quantity: 140 }, { _id: 2, type: "vanilla", orderDate: new Date("2021-01-11T06:31:15Z"), state: "CA", price: 12, quantity: 145 }, { _id: 3, type: "vanilla", orderDate: new Date("2020-02-08T13:13:23Z"), state: "WA", price: 13, quantity: 104 }, { _id: 4, type: "strawberry", orderDate: new Date("2019-05-18T16:09:01Z"), state: "CA", price: 41, quantity: 162 }, { _id: 5, type: "strawberry", orderDate: new Date("2019-01-08T06:12:03Z"), state: "WA", price: 43, quantity: 134 } ] )
The cakeSales collection is used in the following examples.
Use in $group Stage
This example uses $count in the $group stage to
count the number of documents in the cakeSales collection for each
state:
db.cakeSales.aggregate( [ { $group: { _id: "$state", countNumberOfDocumentsForState: { $count: {} } } } ] )
In the example:
_id: "$state"groups the documents by thestatefield value. There are groups forCAandWA.$count: {}sets thecountNumberOfDocumentsForStatefield to the number of documents that share the samestatefield value.
In this output, the number of documents for CA and WA is shown
in the countNumberOfDocumentsForState field:
{ "_id" : "CA", "countNumberOfDocumentsForState" : 3 } { "_id" : "WA", "countNumberOfDocumentsForState" : 3 }
Use in $setWindowFields Stage
This example uses $count in the $setWindowFields
stage to count the number of documents in the cakeSales collection
for each state defined in the window:
db.cakeSales.aggregate( [ { $setWindowFields: { partitionBy: "$state", sortBy: { orderDate: 1 }, output: { countNumberOfDocumentsForState: { $count: {}, window: { documents: [ "unbounded", "current" ] } } } } } ] )
In the example:
partitionBy: "$state"partitions the documents in the collection bystate. There are partitions forCAandWA.sortBy: { orderDate: 1 }sorts the documents in each partition byorderDatein ascending order (1), so the earliestorderDateis first.
outputsets thecountNumberOfDocumentsForStatefield to the number of documents using$countthat is run in a documents window.The window contains documents between an
unboundedlower limit and thecurrentdocument in the output. This means$countreturns the number of documents between the beginning of the partition and the current document.
In this output, the number of documents for CA and WA is shown
in the countNumberOfDocumentsForState field:
{ "_id" : 4, "type" : "strawberry", "orderDate" : ISODate("2019-05-18T16:09:01Z"), "state" : "CA", "price" : 41, "quantity" : 162, "countNumberOfDocumentsForState" : 1 } { "_id" : 0, "type" : "chocolate", "orderDate" : ISODate("2020-05-18T14:10:30Z"), "state" : "CA", "price" : 13, "quantity" : 120, "countNumberOfDocumentsForState" : 2 } { "_id" : 2, "type" : "vanilla", "orderDate" : ISODate("2021-01-11T06:31:15Z"), "state" : "CA", "price" : 12, "quantity" : 145, "countNumberOfDocumentsForState" : 3 } { "_id" : 5, "type" : "strawberry", "orderDate" : ISODate("2019-01-08T06:12:03Z"), "state" : "WA", "price" : 43, "quantity" : 134, "countNumberOfDocumentsForState" : 1 } { "_id" : 3, "type" : "vanilla", "orderDate" : ISODate("2020-02-08T13:13:23Z"), "state" : "WA", "price" : 13, "quantity" : 104, "countNumberOfDocumentsForState" : 2 } { "_id" : 1, "type" : "chocolate", "orderDate" : ISODate("2021-03-20T11:30:05Z"), "state" : "WA", "price" : 14, "quantity" : 140, "countNumberOfDocumentsForState" : 3 }