$count (aggregation accumulator)
On this page
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.
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 thestate
field value. There are groups forCA
andWA
.$count: {}
sets thecountNumberOfDocumentsForState
field to the number of documents that share the samestate
field 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 forCA
andWA
.sortBy: { orderDate: 1 }
sorts the documents in each partition byorderDate
in ascending order (1
), so the earliestorderDate
is first.
output
sets thecountNumberOfDocumentsForState
field to the number of documents using$count
that is run in a documents window.The window contains documents between an
unbounded
lower limit and thecurrent
document in the output. This means$count
returns 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 }