{
$facet: {
byStatus: [
{ $group: { _id: "$status", count: { $sum: 1 } } }
],
topUsers: [
{ $group: { _id: "$user", total: { $sum: "$amount" } } },
{ $sort: { total: -1 } },
{ $limit: 5 }
],
stats: [
{ $group: {
_id: null,
avg: { $avg: "$amount" },
max: { $max: "$amount" },
min: { $min: "$amount" }
} }
]
}
} {
$facet: {
byStatus: [
{ $group: { _id: "$status", count: { $sum: 1 } } }
],
topUsers: [
{ $group: { _id: "$user", total: { $sum: "$amount" } } },
{ $sort: { total: -1 } },
{ $limit: 5 }
],
stats: [
{ $group: {
_id: null,
avg: { $avg: "$amount" },
max: { $max: "$amount" },
min: { $min: "$amount" }
} }
]
}
} {
$lookup: {
from: "orders",
let: { userId: "$_id", status: "$premium" },
pipeline: [
{ $match: {
$expr: {
$and: [
{ $eq: ["$userId", "$$userId"] },
{ $gte: ["$amount", { $cond: ["$$status", 1000, 500] }] }
]
}
}
},
{ $project: { _id: 0, date: 1, amount: 1 } }
],
as: "bigOrders"
}
} {
$lookup: {
from: "orders",
let: { userId: "$_id", status: "$premium" },
pipeline: [
{ $match: {
$expr: {
$and: [
{ $eq: ["$userId", "$$userId"] },
{ $gte: ["$amount", { $cond: ["$$status", 1000, 500] }] }
]
}
}
},
{ $project: { _id: 0, date: 1, amount: 1 } }
],
as: "bigOrders"
}
} {
$setWindowFields: {
partitionBy: "$department",
sortBy: { salary: -1 },
output: {
rank: { $rank: {} },
movingAvg: {
$derivative: { // или $avg, $sum, $min, $max, $stdDevPop, $stdDevSamp
input: "$salary",
unit: "month"
},
window: { documents: [-2, 0] } // текущий + 2 предыдущих
},
cumulativeCount: {
$documentNumber: {},
window: { documents: ["unbounded", "current"] }
}
}
}
} {
$setWindowFields: {
partitionBy: "$department",
sortBy: { salary: -1 },
output: {
rank: { $rank: {} },
movingAvg: {
$derivative: { // или $avg, $sum, $min, $max, $stdDevPop, $stdDevSamp
input: "$salary",
unit: "month"
},
window: { documents: [-2, 0] } // текущий + 2 предыдущих
},
cumulativeCount: {
$documentNumber: {},
window: { documents: ["unbounded", "current"] }
}
}
}
}