Aggregation Operators
Aggregation operators can be used to create expressions in the aggregation pipeline. The operators work like functions. They typically take either a single argument like this:
Or they take an array of arguments like this:
Aggregation Operators Types
Type | Description |
Boolean Operators | Boolean operators evaluate their expression and return a boolean result. |
Comparison Operators | Comparison operators compare two arguments and return a boolean result or a number. |
Arithmetic Operators | Arithmetic operators perform calculations on numbers and dates |
String Operators | String operators perform operations on string arguments. |
Array Operators | Array operators perform operations on array arguments. |
Set Operators | Set operators work on arrays but treats them as sets, ignoring duplicate entries and order and return a set as a result. |
Literal Operators | Literal operators return a value or expression without parsing or evaluating the expression. |
Date Operators | Date operators perform operations on date arguments. |
Conditional Operators | Conditional operators evaluate expressions and return a value depending on the result of the condition. |
Accumulator Operators | Accumulator operators take a single expression as input and evaluate that expression once for each document in the result set. |
Boolean Operators
Operator | Description | Example |
$and | Evaluates to true if all conditions in the passed in array evaluate to true. | {“$and”: [“c_active”, “c_fav”]} |
$or | Evaluates to true if any condition in the passed in array evaluate to true. | {“$or”: [“c_active”, “c_fav”]} |
$not | Evaluates to true if the property or expression evaluates to false. | {“$not”: “c_active”} |
Comparison Operators
Operator | Description | Example |
$cmp | Returns 0 if the two passed in array values are equivalent, 1 if the first value is greater than the second, -1 if the second value is greater than the first. | {“$cmp”: [“name.first”, {“$string”: “Jamie”}]} |
$gt | Selects documents where the value of the property is greater than the passed in value. | {“c_bpm”: {“$gt”: 70}} |
$gte | Selects documents where the value of the property is greater than or equal to the passed in value. | {“c_bpm”: {“$gte”: 70}} |
$lt | Selects documents where the value of the property is lesser than the passed in value. | {“c_bpm”: {“$lt”: 70}} |
$lte | Selects documents where the value of the property is lesser than or equal to the passed in value. | {“c_bpm”: {“$lte”: 70}} |
$ne | Returns true if the first property or expression in the passed in not equivalent to the second. | {“$ne”: [“c_bpm”, {“$integer”: 100}]} |
Arithmetic Operators
Operator | Description | Example |
$trunc | Truncates a number down to an integer. | { "$trunc": "c_value" } } |
$sqrt | Takes the square root of an aggregated number. | {"$sqrt": {"$add": "c_value"}} |
$ln | Takes the log of a number. | {"$ln": "c_number"} |
$floor | Returns the largest integer less than or equal to the number | {"$floor": "c_number"} |
$exp | Takes the e^n of a number | {"$exp": "c_number"} |
$ceil | Returns the smallest integer greater than or equal to the specified number. | {"$ceil": "c_number"} |
$abs | Takes the absolute value of a number. | {"$abs": "c_number"} |
$add | Adds two or more array properties or expressions. In addition to numbers, a single Date value may be included in the array. | {“$add”: [“created”, “c_msOffset”]} |
$multiply | Multiplies two or more number properties or expressions in the passed in array. | {“$multiply”: [“c_bpm”, “c_scalar”, {“$number”: 0.99}]} |
$subtract | Subtracts the second element from the first in the passed in array. In addition to number properties, numbers and dates maybe be subtracted from a date value. | {“$subtract”: [“created”, “updated”]} |
$divide | Divides the second element by the first in the passed in array. | {“$divide”: [“c_bpm”, {“$number”: 0.9}]} |
$mod | Divides the second element by the first in the passed in array, and returns the remainder. | {“$divide”: [“c_bpm”, {“$number”: 20}]} |
$pow | Raises the first number to the power of the second number. | {“$pow”: [“c_heartrate”, {“$number”: 2}]} |
$log | Takes the log of the first number in the second number's base. | {“$log”: [100, 10] } // result: 2 |
String Operators
Operator | Description | Example |
$concat | Concatenates two or more string properties or expressions in the passed in array. | {“$concat”: [“name.first”, {“$string”: “ ”}, “name.last”]} |
$substr | Returns a portion of a string. Takes an array of three elements: source string, integer start index and integer length. The integer values can be literals, properties, or expressions. | {“$substr”: [“c_desc”, 0, 20]} |
$toLower | Returns a lowercase version of the string argument. | {“$toLower”: “c_title”} |
$toUpper | Returns an uppercase version of the string argument. | {“$toUpper”: “c_title”} |
$strcasecmp | Performs a case-insensitive string comparison. Returns 0 if the two passed in array values are equivalent, 1 if the first value is greater than the second, -1 if the second value is greater than the first. | {“$strcasecmp”: [“name.first”, {“$string”: “J”}]} |
Array Operators
Operator | Description | Example |
$size | Returns the size of the array argument. The argument must resolve to an array | {“$size”: “body”} |
$slice | Returns the subset of an array. Param 1: The master array Param 2 (optional): the position to start evaluating the array from Param 3: the number of elements from param 2 to return | { $slice: [ [ 1, 5, 7, 9 ], 1, 2 ] } // returns [5, 7] |
$isArray | Returns true if the operand is an array | {"$isArray": [1,2,3]} // returns true |
$concatArrays | Returns an array which contains all the arrays concatenated together. | {"$concatArrays": [ [ "medable", "is"], [ "great" ] ] } //returns ["medable", "is", "great"] |
$arrayElemAt | Returns the element in the array at a specified index. | { $arrayElemAt: [ [ "purple", "orange", "yellow" ], 1 ] } //returns "orange" |
Set Operators
Operator | Description | Example |
$setEquals | Evaluates to true if the passed in array properties or expressions contain the same distinct elements | {“$setEquals”: [ {“$array”: [“cpg”, “mvc”, “kvm”]}, “c_requested” ] }} |
$setIntersection | Returns the intersection between 2 or more input arrays. | {“$setIntersection”:[“c_available”, “c_reserved”]} |
$setUnion | Combines 2 or more input arrays. | {“$setUnion”:[{“$array”: [“000000000000000000000007”]}, “roles”]}}} |
$setDifference | Returns the difference between 2 or more input arrays. | {“$setDifference”:[{“$array”: [“000000000000000000000007”]}, “roles”]}}} |
$setIsSubset | Returns true if the first array is a subset of the second. | {“$setIsSubset”: [“c_some”, “c_all”]} |
$anyElementTrue | Returns true if any property or expression in the passed in array evaluates to true. | {“$anyElementTrue”: [“c_bool”, “c_fav”]} |
$allElementsTrue | Returns true if all properties or expressions in the passed in array evaluate to true. | {“$allElementsTrue”: [“c_bool”, “c_fav”]} |
Literal Operators
Operator | Description | Example |
$literal | Allows the insertion of any literal value. This is used mainly when you'd like to use a value that would otherwise be evaluated as an expression. | pricesEqual: { $eq: [ "$cashValue", { $literal: "$10" } ] } |
$string | Allows the insertion of a string literal. The value must be a string or an expression that evaluates to a string. | {“$concat”: [“c_pants”, {“$string”: “c_pants”}] } -> “clown c_pants” |
$number | Allows the insertion of a number value as a literal where a property name would otherwise be expected. The value must be a number or an expression that evaluates to a number. | {“$add”: [“c_scalar”, {“$number”: 1.23}]} |
$integer | Allows the insertion of an integer value as a literal where a property name would otherwise be expected. The value must be an integer or an expression that evaluates to an integer. | {“$add”: [“c_ints”, {“$integer”: 10}]} |
$boolean | Allows the insertion of a boolean value as a literal where a property name would otherwise be expected. The value must be a boolean or an expression that evaluates to a boolean. | {“alwaysFirstName”: {“$first”: {“$cond”: [{“$boolean”: true}, “name.first”, “name.last”]}}} |
$date | Allows the insertion of a date value as a literal where a property name would otherwise be expected. The value must be a date or an expression that evaluates to a date. | {“offsetDate”: {“$add”: [{“$date”: “2015-06-07T14:48:00.000Z”}, “c_offset”]}} |
$objectId | Allows the insertion of an objectId value as a literal where a property name would otherwise be expected. The value must be an objectId or an expression that evaluates to an objectId. | {“$cmp”: [{“$objectId”: “561614700000000000000000”}, “_id”]} |
$array | Allows the insertion of an array value as a literal where a property name would otherwise be expected. The value must be an array or an expression that evaluates to an array. | {“$setUnion”:[{“$array”: [“000000000000000000000007”]}, “roles”]}}} |
$object | Allows the insertion of an object value as a literal where a property name would otherwise be expected. The value must be an object or an expression that evaluates to an object. | {“$eq”: [ {“$object”: { "street": "Easy St" }}, “c_address”]} |
Date Operators
Operator | Description | Example |
$dayOfWeek | Returns the day of the week for the passed in date property or expression as a number from 1 (Sunday) to 7 (Saturday). | {"$dayOfWeek": "created"} |
$dayOfMonth | Returns the day of the month for the passed in date property or expression as a number from 1 to 31 | {"$dayOfMonth": "created"} |
$dayOfYear | Returns the day of the year for the passed in date property or expression as a number from 1 to 366 | {"$dayOfYear": "created"} |
$year | Returns the year for the passed in date property or expression. | {"$year": "created"} |
$month | Returns the month for the passed in date property or expression. | {"$month": "created"} |
$week | Returns the week of the year for the passed in date property or expression as a number between 0 (the partial week that precedes the first Sunday of the year) and 53 (in a leap year). | {"$week": "created"} |
$hour | Returns the hour for the passed in date property or expression as a number between 0 and 23. | {"$hour": "created"} |
$minute | Returns the minute for the passed in date property or expression as a number between 0 and 59. | {"$minute": "created"} |
$second | Returns the second for the passed in date property or expression as a number between 0 and 60 (for a leap second). | {"$second": "created"} |
$millisecond | Returns the millisecond for the passed in date property or expression as a number between 0 and 999. | {"$millisecond": "created"} |
$dateToString | Converts a date object to a string in a specified format, and expects an array of [, date_expression] | { "$dateToString": ["%Y-%m-%d", "created"] } |
Date Format Specifiers
Specifiers | Description | Possible Values |
%d | Day of Month (2 digits, zero padded) | 01-31 |
%G | Year in ISO 8601 format | 0000-9999 |
%H | Hour (2 digits, zero padded, 24-hour clock) | 00-23 |
%j | Day of year (3 digits, zero padded) | 001-366 |
%L | Millisecond (3 digits, zero padded) | 000-999 |
%m | Month (2 digits, zero padded) | 01-12 |
%M | Minute (2 digits, zero padded) | 00-59 |
%S | Second (2 digits, zero padded) | 00-60 |
%u | Day of week number in ISO 8601 format (1-Monday, 7-Sunday) | 1-7 |
%U | Week of year (2 digits, zero padded) | 00-53 |
%V | Week of Year in ISO 8601 format | 1-53 |
%w | Day of week (1-Sunday, 7-Saturday) | 1-7 |
%Y | Year (4 digits, zero padded) | 0000-9999 |
%% | Percent Character as a Literal | % |
Conditional Operators
Operator | Description | Example |
$cond | Takes an array of 3 expressions. If the first expression evaluates to true, the second expression value is returned. Otherwise, the value of the third expression is returned. | {“$cond”: [“c_active”, {“$string”: “active”}, {“$string”: “inactive”}]} |
$ifNull | Takes an array of 2 expressions. Returns the value of the first expression unless it evaluates to null, in which case the value of the second expression is returned. | {“$ifNull”: [“c_offset”, {“$integer”: 42}]} |
Accumulator Operators
Operator | Description | Example |
$count | Performs a count of a grouped documents or, if the property is an array, a count of the number of elements. | {“numInGroup”: {“$count”: “_id”}} |
$sum | Calculates the sum of a number property or expression in the group. | {“sumOfDays”: {“$sum”: {“$dayOfMonth”: “created”}}} |
$avg | Calculates the average of a number property or expression in the group. | {“averageHeartRate”: {“$avg”: “c_bpm”}} |
$first | Returns the first value from the group. The result depends on the sort field(s). | {“oldest”: {“$first”: “created”}} |
$last | Returns the last value from the group. The result depends on the sort field(s). | {“latest”: {“$last”: “created”}} |
$min | Returns the smallest value from the group. | {“smallest”: {“$min”: “c_size”}} |
$max | Returns the largest value from the group. | {“largestArray”: {“$max: {”$size": “c_arr”}}} |
$pushAll | Returns the array of pushed values, with NULL included in the array where there are missing values | {"combinedArray": {"$pushAll": "c_value"}} |
$push | Returns the array of pushed values | {"combinedArray": {"$push": "c_value"}} |
$addToSet | Returns array of unique pushed values | {"uniqueArray": {"$addToSet": "c_value"}} |
$stdDevPop | Returns the population standard deviation of input values | {"stdDeviation": { "$stdDevPop": "c_heartrate"}} |
$stdDevSamp | Returns the sample standard deviation of input values | {"stdDeviation": { "$stdDevSamp": "c_heartrate"}} |
Last updated