MongoDB Aggregation Pipeline
Using aggregation framework
$match
db.orders.aggregate([
{ $match: { status: 'completed' } }
]); # filter documents
$group
db.orders.aggregate([
{ $group: {
_id: '$customer',
total: { $sum: '$amount' }
}}
]); # group and sum
$project
db.users.aggregate([
{ $project: {
name: 1,
email: 1,
_id: 0
}}
]); # select fields
$sort
db.users.aggregate([
{ $sort: { age: -1 } }
]); # sort descending
$limit and $skip
db.users.aggregate([
{ $skip: 10 },
{ $limit: 5 }
]); # pagination
$lookup
db.orders.aggregate([
{ $lookup: {
from: 'users',
localField: 'user_id',
foreignField: '_id',
as: 'user'
}}
]); # join collections
$unwind
db.orders.aggregate([
{ $unwind: '$items' }
]); # deconstruct array
Aggregation Operators
$sum # sum values
$avg # average
$min # minimum
$max # maximum
$push # add to array
$first # first value
$last # last value