Chapter 6. Aggregation

MongoDB provides a number of aggregation tools that go beyond basic query functionality. These range from simply counting the number of documents in a collection to using MapReduce to do complex data analysis.

count

The simplest aggregation tool is count, which returns the number of documents in the collection:

> db.foo.count()
0
> db.foo.insert({"x" : 1})
> db.foo.count()
1

Counting the total number of documents in a collection is fast regardless of collection size.

You can also pass in a query, and Mongo will count the number of results for that query:

> db.foo.insert({"x" : 2})
> db.foo.count()
2
> db.foo.count({"x" : 1})
1

This can be useful for getting a total for pagination: “displaying results 0–10 of 439.” Adding criteria does make the count slower, however.

distinct

The distinct command finds all of the distinct values for a given key. You must specify a collection and key:

> db.runCommand({"distinct" : "people", "key" : "age"})

For example, suppose we had the following documents in our collection:

{"name" : "Ada", "age" : 20}
{"name" : "Fred", "age" : 35}
{"name" : "Susan", "age" : 60}
{"name" : "Andy", "age" : 35}

If you call distinct on the "age" key, you will get back all of the distinct ages:

> db.runCommand({"distinct" : "people", "key" : "age"})
{"values" : [20, 35, 60], "ok" : 1}

A common question at this point is if there’s a way to get all of the distinct keys in a collection. There is no built-in way of doing this, although you can write something to ...

Get MongoDB: The Definitive Guide now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.