The aggregate command does the aggregation operation using the aggregation pipeline. The aggregation pipeline allows the user to perform data processing from a record or other source using a stage-based application sequence.
Syntax:
{
aggregate: "<collection>" || 1, pipeline: [ <stage>, <...>],
explain: <boolean>, allowDiskUse: <boolean>,
cursor: <doc>,
maxTimeMS: <int>,
bypassDocumentValidation: <boolean>,
readConcern: <doc>,
collation: <doc>,
hint: <string or doc>,
comment: <string>,
writeConcern: <doc>
}Command fields:
| Fields | Type | Description |
|---|---|---|
| aggregate | string | It contains the name of the aggregation pipeline |
| pipeline | array | The array that transforms the list of documents as a part of the aggregation pipeline. |
| explain | boolean | The explain field is optional that is used to return the information on the processing of the pipeline. |
| allowDiskUse | boolean | It enables the command to write to the temporary files. |
| cursor | document | It addresses the documents that contains the control option for the creation of the cursor object. |
| maxTimeMS | non-negative integer | It defines a time limit for the processing operations on a cursor. |
| Bypass Document Validation |
boolean | It is applicable only in case if you specify the out or merge aggregation stages. |
| readConcern | document | It specifies the read concern. The possible read concern levels are - local, available, majority, and linearizable. |
| collation | document | We can specify language-specific rules for string comparison using collation. Such as - rules for case and accent marks.
collation:
{ locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>}
|
| hint | string or document | It declares the index either by the index name or by the index specification document. |
| comment | string | We can declare an arbitrary string to help trace the operation through the database profiler, currentOp, and logs. |
| writeConcern | document | It is set to use the default write concern with the $out or $merge pipeline stages. |
Example:
We have the following documents in the article:
{
_id: ObjectId("52769ea0f3dc6ead47c9a1b2"),
author: "Ankit",
title: "rookienerd",
tags: [ "Java Tutorial", "DBMS Tutorial", "mongodb"]
}Now, we'll perform an aggregate operation on the articles collection to calculate the count of every distinct element within the tags array that appears within the collection.
db.runCommand( { aggregate: "articles",
pipeline: [
{ $project: { tags: 1 } },
{ $unwind: "$tags" },
{ $group: { _id: "$tags", count: { $sum : 1 } } }
],
cursor: { }
} )The MongoDB count command counts the number of documents in a collection or a view. It returns a document that contains the count and command status.
Syntax:
{
count: <collection or view>,
query: <document>,
limit: <integer>,
skip: <integer>,
hint: <hint>,
readConcern: <document>,
collation: <document>
}Command fields
| Field | Type | Description |
|---|---|---|
| count | string | It is the name of the collection or view to count. |
| query | document | It is optional and used to select the document to count in the collection or view. |
| limit | integer | It is optional and used to limit the maximum number of matching documents to return. |
| skip | integer | It is optional and is used for matching documents to skip before returning results. |
| hint | string | It is used to define either the index name as a string or the index specification document. |
| readConcern document | It specifies the read concern.
readConcern: { level: <value> } |
|
| collation | document | It allows us to define language-specific rules for string comparison. Syntax: collation: {
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
} |
Examples:
To count the number of all the documents in the collection:
db.runCommand( { count: 'orders' } )This command finds the distinct values for the given field across a single collection. It returns a document that contains an array of different values. The return document contains an embedded record with query statistics and the query plan.
Syntax:
distinct: "<collection>", key: "<field>", query: <query>, readConcern: <read concern document>, collation: <collation document> }
Command fields
| Field | Type | Description |
|---|---|---|
| distinct | string | It is the name of the collection to query for different values |
| key | string | This is the field for which the command returns the distinct value. |
| query | document | It specifies the documents from where the distinct value will be retrieved. |
| readConcern document | It specifies the read concern.
readConcern: { level: <value> } |
|
| collation | document | It allows us to define language-specific rules for string comparison. Syntax: collation: {
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
} |
Example:
The following example returns different values for the field books from all documents in the library collection:
db.runCommand ( { distinct: "library", key: "books" } )The MapReduce command allows us to run the map-reduce aggregation operations over a collection.
Syntax:
db.runCommand(
{
mapReduce: <collection>,
map: <function>,
reduce: <function>,
finalize: <function>,
out: <output>,
query: <document>,
sort: <document>,
limit: <number>,
scope: <document>,
jsMode: <boolean>,
verbose: <boolean>,
bypassDocumentValidation: <boolean>,
collation: <document>,
writeConcern: <document>
}
)Command Fields
| Field | Type | Description |
|---|---|---|
| MapReduce | collection | It is the name of the collection on which we want to perform the map-reduce operation. |
| map | function | It is a JavaScript function that associates or maps the key-value pair. |
| reduce | function | It is a JavaScript function that reduces to a single object all the values associated with a particular key. |
| out | string | It specifies where to store the output. |
| query | document | It specifies the selection criteria to determine the documents input to the map function. |
| sort | document | It sorts the input document. |
| limit | number | It specifies a maximum number of documents for the input into the map function. |
| finalize | function | It follows the reduce method to modify the output. |
| scope | document | It is an option and declares the global variables that are accessible on the map. |
| jsMode | boolean | The jsMode specifies whether to convert intermediate data into BSON format. |
| verbose | boolean | It specifies whether to include the timing information in the result or not. |
| bypass Document Validation |
boolean | It enables map-reduce to bypass document validation during the operation. |
| collation | document | It allows us to specify language-specific rules for string comparison.
collation: {
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
} |
| writeConcern | document | It is a document that expresses the write concern to use when outputting to a collection. |
Example:
var mapFunction = function() { ... };
var reduceFunction = function(key, values) { ... };
db.runCommand(
{
mapReduce: <input-collection>,
map: mapFunction,
reduce: reduceFunction,
out: { merge: <output-collection> },
query: <query>
}
)