MongoDB Aggregation PDF

Download as pdf or txt
Download as pdf or txt
You are on page 1of 4
At a glance
Powered by AI
Some of the key takeaways from the document are that MongoDB supports data aggregation through its aggregation framework and pipeline concept similar to UNIX pipelines. It allows performing data aggregation operations on MongoDB collections.

Some aggregation expressions available in MongoDB include $sum to sum values, $avg to calculate average, $min and $max to get minimum and maximum values, $push and $addToSet to add to arrays without and with duplicates respectively.

The concept of a pipeline in MongoDB aggregation refers to chaining together aggregation operations or stages where the output of one stage is used as input for the next stage, similar to UNIX pipelines.

2/28/2018 MongoDB Aggregation

MongoDB - Aggregation
Advertisements

 Previous Page Next Page 

Aggregations operations process data records and return computed results. Aggregation
operations group values from multiple documents together, and can perform a variety of
operations on the grouped data to return a single result. In SQL count(*) and with group
by is an equivalent of mongodb aggregation.

The aggregate() Method


For the aggregation in MongoDB, you should use aggregate() method.

Syntax
Basic syntax of aggregate() method is as follows −

>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

Example
In the collection you have the following data −

{
_id: ObjectId(7df78ad8902c)
title: 'MongoDB Overview',
description: 'MongoDB is no sql database',
by_user: 'tutorials point',
url: 'http://www.tutorialspoint.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
},
{
_id: ObjectId(7df78ad8902d)
title: 'NoSQL Overview',
description: 'No sql database is very fast',
by_user: 'tutorials point',
url: 'http://www.tutorialspoint.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 10
},
{
_id: ObjectId(7df78ad8902e)
title: 'Neo4j Overview',
description: 'Neo4j is no sql database',
https://www.tutorialspoint.com/mongodb/mongodb_aggregation.htm 1/4
2/28/2018 MongoDB Aggregation

by_user: 'Neo4j',
url: 'http://www.neo4j.com',
tags: ['neo4j', 'database', 'NoSQL'],
likes: 750
},

Now from the above collection, if you want to display a list stating how many tutorials are
written by each user, then you will use the following aggregate() method −

> db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])


{
"result" : [
{
"_id" : "tutorials point",
"num_tutorial" : 2
},
{
"_id" : "Neo4j",
"num_tutorial" : 1
}
],
"ok" : 1
}
>

Sql equivalent query for the above use case will be select by_user, count(*) from
mycol group by by_user.

In the above example, we have grouped documents by field by_user and on each
occurrence of by_user previous value of sum is incremented. Following is a list of available
aggregation expressions.

Expression Description Example

Sums up the defined value from all documents db.mycol.aggregate([{$group :


$sum in the collection. {_id : "$by_user", num_tutorial
: {$sum : "$likes"}}}])

Calculates the average of all given values from db.mycol.aggregate([{$group :


$avg all documents in the collection. {_id : "$by_user", num_tutorial
: {$avg : "$likes"}}}])

Gets the minimum of the corresponding values db.mycol.aggregate([{$group :


$min from all documents in the collection. {_id : "$by_user", num_tutorial
: {$min : "$likes"}}}])

Gets the maximum of the corresponding db.mycol.aggregate([{$group :


$max values from all documents in the collection. {_id : "$by_user", num_tutorial
: {$max : "$likes"}}}])

$push Inserts the value to an array in the resulting db.mycol.aggregate([{$group :


document. {_id : "$by_user", url : {$push:
"$url"}}}])
https://www.tutorialspoint.com/mongodb/mongodb_aggregation.htm 2/4
2/28/2018 MongoDB Aggregation

Inserts the value to an array in the resulting db.mycol.aggregate([{$group :


$addToSet document but does not create duplicates. {_id : "$by_user", url :
{$addToSet : "$url"}}}])

Gets the first document from the source db.mycol.aggregate([{$group :


documents according to the grouping. {_id : "$by_user", first_url :
$first
Typically this makes only sense together with {$first : "$url"}}}])
some previously applied “$sort”-stage.

Gets the last document from the source db.mycol.aggregate([{$group :


documents according to the grouping. {_id : "$by_user", last_url :
$last
Typically this makes only sense together with {$last : "$url"}}}])
some previously applied “$sort”-stage.

Pipeline Concept
In UNIX command, shell pipeline means the possibility to execute an operation on some
input and use the output as the input for the next command and so on. MongoDB also
supports same concept in aggregation framework. There is a set of possible stages and
each of those is taken as a set of documents as an input and produces a resulting set of
documents (or the final resulting JSON document at the end of the pipeline). This can then
in turn be used for the next stage and so on.

Following are the possible stages in aggregation framework −

$project − Used to select some specific fields from a collection.

$match − This is a filtering operation and thus this can reduce the amount of
documents that are given as input to the next stage.

$group − This does the actual aggregation as discussed above.

$sort − Sorts the documents.

$skip − With this, it is possible to skip forward in the list of documents for a given
amount of documents.

$limit − This limits the amount of documents to look at, by the given number
starting from the current positions.

$unwind − This is used to unwind document that are using arrays. When using an
array, the data is kind of pre-joined and this operation will be undone with this to
have individual documents again. Thus with this stage we will increase the amount
of documents for the next stage.

 Previous Page Next Page 

https://www.tutorialspoint.com/mongodb/mongodb_aggregation.htm
Ad ti t 3/4
2/28/2018 MongoDB Aggregation
Advertisements

Tutorials Point (India) Pvt. Ltd.

YouTube 52K

Write for us FAQ's Helping Contact


© Copyright 2018. All Rights Reserved.

Enter email for newsletter go

https://www.tutorialspoint.com/mongodb/mongodb_aggregation.htm 4/4

You might also like