Get a count of total documents with MongoDB when using limit Get a count of total documents with MongoDB when using limit mongodb mongodb

Get a count of total documents with MongoDB when using limit


Mongodb 3.4 has introduced $facet aggregation

which processes multiple aggregation pipelines within a single stage on the same set of input documents.

Using $facet and $group you can find documents with $limit and can get total count.

You can use below aggregation in mongodb 3.4

db.collection.aggregate([  { "$facet": {    "totalData": [      { "$match": { }},      { "$skip": 10 },      { "$limit": 10 }    ],    "totalCount": [      { "$group": {        "_id": null,        "count": { "$sum": 1 }      }}    ]  }}])

Even you can use $count aggregation which has been introduced in mongodb 3.6.

You can use below aggregation in mongodb 3.6

db.collection.aggregate([  { "$facet": {    "totalData": [      { "$match": { }},      { "$skip": 10 },      { "$limit": 10 }    ],    "totalCount": [      { "$count": "count" }    ]  }}])


No, there is no other way. Two queries - one for count - one with limit. Or you have to use a different database. Apache Solr for instance works like you want. Every query there is limited and returns totalCount.


MongoDB allows you to use cursor.count() even when you pass limit() or skip().

Lets say you have a db.collection with 10 items.

You can do:

async function getQuery() {  let query = await db.collection.find({}).skip(5).limit(5); // returns last 5 items in db  let countTotal = await query.count() // returns 10-- will not take `skip` or `limit` into consideration  let countWithConstraints = await query.count(true) // returns 5 -- will take into consideration `skip` and `limit`  return { query, countTotal } }