Using Aggregation Operators
1. Using Arithmetic Operators
| Operator | Effect |
|---|---|
| $add, $subtract, $multiply, $divide, $mod | Basic math |
| $abs, $ceil, $floor, $round, $trunc | Rounding |
| $pow, $sqrt, $exp, $ln, $log, $log10 | Power/log |
| $sin, $cos, $tan, $asin, $acos, $atan, $atan2 | Trig |
2. Using Comparison Operators
| Operator | Returns |
|---|---|
| $eq, $ne, $gt, $gte, $lt, $lte | Boolean |
| $cmp | -1 / 0 / 1 |
3. Using String Operators
| Operator | Effect |
|---|---|
| $concat | Concatenate |
| $substr, $substrBytes, $substrCP | Substring |
| $toLower, $toUpper | Case |
| $trim, $ltrim, $rtrim | Whitespace |
| $split | Split by separator |
| $strLenBytes, $strLenCP | Length |
| $indexOfBytes, $indexOfCP | Search |
| $regexMatch, $regexFind, $regexFindAll | Regex |
| $replaceOne, $replaceAll | Replace |
4. Using Array Operators
| Operator | Effect |
|---|---|
| $size | Array length |
| $arrayElemAt | Element at index |
| $first, $last | Ends |
| $slice | Subarray |
| $concatArrays | Concatenate |
| $filter, $map, $reduce | Transforms |
| $in | Element membership |
| $zip | Pair arrays |
| $range | Generate |
| $sortArray | Sort inline |
5. Using Date Operators
| Operator | Effect |
|---|---|
| $year, $month, $dayOfMonth, $hour, $minute, $second, $millisecond | Extract |
| $dayOfWeek, $dayOfYear, $week | Calendar |
| $dateAdd, $dateSubtract | Add/subtract intervals |
| $dateDiff | Difference in unit |
| $dateToString | Format |
| $dateFromString | Parse |
| $dateTrunc | Bucket to unit |
6. Using Conditional Operators
| Operator | Form |
|---|---|
| $cond | [if, then, else] |
| $ifNull | [expr, fallback] |
| $switch | {branches:[{case,then}], default} |
| $coalesce NEW | First non-null |
7. Using Accumulator Operators
| Operator | Use |
|---|---|
| $sum, $avg, $min, $max | Stats |
| $push | Collect to array |
| $addToSet | Unique collect |
| $first, $last | Boundary doc |
| $mergeObjects | Merge subdocs |
| $stdDevPop, $stdDevSamp | Std deviation |
| $accumulator | Custom JS accumulator |
| $count | Per-group count (5.0+) |
| $topN, $bottomN, $firstN, $lastN, $minN, $maxN | Top-N (5.2+) |
8. Using Type Conversion
| Operator | Effect |
|---|---|
| $toString, $toInt, $toLong, $toDouble, $toDecimal | Numeric/string conversions |
| $toDate, $toObjectId, $toBool | Type conversion |
| $convert | Generic with onError / onNull |
| $type | Return BSON type string |
9. Using Set Operators
| Operator | Effect |
|---|---|
| $setUnion | Union |
| $setIntersection | Intersect |
| $setDifference | Difference |
| $setEquals | Equal as sets |
| $setIsSubset | Subset? |
| $anyElementTrue / $allElementsTrue | Truthiness |
10. Using Object Operators
| Operator | Effect |
|---|---|
| $mergeObjects | Merge documents |
| $objectToArray | {a:1} → [{k:"a",v:1}] |
| $arrayToObject | Inverse |
| $getField / $setField | Dynamic field access (5.0+) |
| $unsetField | Remove field by expression |
11. Using Window Operators
| Stage | Detail |
|---|---|
| $setWindowFields | partitionBy, sortBy, output with window |
| Window | documents:[N,M] or range:[low,high,unit] |
| Operators | $sum, $avg, $rank, $denseRank, $rowNumber, $shift, $derivative, $integral, $covarianceSamp, $expMovingAvg, $linearFill, $locf |
{ $setWindowFields: {
partitionBy: "$symbol",
sortBy: { ts: 1 },
output: { ma7: { $avg: "$price", window: { documents: [-6, 0] } } }
} }