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