Этот pipeline агрегации находит отдел с самой высокой средней зарплатой, соединяя вместе три стадии.
$group — группирует все документы по полю department и вычисляет среднюю зарплату для каждой группы, используя $avg$sort — сортирует результаты по avgSalary в убывающем порядке (-1), так что наибольшее среднее значение оказывается первым$limit — ограничивает вывод только одним документом, возвращая лучший результатdb.employees.aggregate([
{ $group: { _id: "$department", avgSalary: { $avg: "$salary" } } },
{ $sort: { avgSalary: -1 } },
{ $limit: 1 }
])
_id в $group определяет ключ группировки — в данном случае это "$department"$avg — это оператор-аккумулятор, который вычисляет среднее по всем значениям salary в каждой группе$limit после $sort гарантирует, что вернётся только отдел с наибольшим средним значением{ "_id": "Engineering", "avgSalary": 95000 }
Использование $sort с последующим $limit эффективнее, чем ручное вычисление максимума, так как MongoDB может оптимизировать этот паттерн на своей стороне при работе с большими коллекциями.
На этапе $group используется $department в качестве ключа группировки, что означает, что документы группируются по строковому значению 'department', а не по значениям в поле department.
Новый — ещё не проверен сообществом
Вы