Примеры из видео
Две случайные записи:
[{
$sample: {
size: 2
}
}]
Статистика по месяцам, общая цена и количество:
[{
$group: {
_id: {
month: {
$month: '$createdDate'
}
},
totalPrice: {
$sum: '$price'
},
total: {
$sum: 1
},
emails: {
$addToSet: '$email'
}
}
}]
Статистика заказов по дням одного месяца:
[{
$match: {
createdDate: {
$gte: ISODate('2019-07'),
$lt: ISODate('2019-08')
}
}
}, {
$group: {
_id: {
day: {
$dayOfMonth: '$createdDate'
}
},
totalPrice: {
$sum: '$price'
},
total: {
$sum: 1
},
emails: {
$addToSet: '$email'
}
}
}, {
$sort: {
'_id.day': 1
}
}]
Изменение ключа:
[{
$group: {
_id: {
month: {
$month: '$createdDate'
}
},
totalPrice: {
$sum: '$price'
},
total: {
$sum: 1
},
buyers: {
$push: {
status: '$status',
email: '$email'
}
}
}
}, {
$project: {
month: '$_id.month',
total: 1,
totalPrice: 1,
buyers: 1
}
}, {
$project: {
_id: 0
}
}]
Статистика заказов с группировкой по ценам с границами с шагом 5000:
[{
$bucket: {
groupBy: '$price',
boundaries: [0, 5000, 10000, 15000, 20000],
default: 'Other',
output: {
count: {
$sum: 1
},
ids: {
$push: '$_id'
}
}
}
}]
Число заказов для каждого статуса:
[{
$group: {
_id: {
month: {
$month: '$createdDate'
}
},
statuses: {
$push: '$status'
},
orders: {
$push: {
id: '$_id',
status: '$status',
date: '$createdDate'
}
}
}
}, {
$project: {
statusNew: {
$size: {
$filter: {
input: '$statuses',
as: 's',
cond: {
$eq: ['$$s', 'Новый']
}
}
}
},
statusNewOrders: {
$filter: {
input: '$orders',
as: 'o',
cond: {
$eq: ['$$o.status', 'Новый']
}
}
},
statusSend: {
$size: {
$filter: {
input: '$statuses',
as: 's',
cond: {
$eq: ['$$s', 'Отправлен']
}
}
}
},
statusPaid: {
$size: {
$filter: {
input: '$statuses',
as: 's',
cond: {
$eq: ['$$s', 'Оплачен']
}
}
}
},
}
}]