Коротка відповідь
seniorMongoDB Aggregation framework — це потужний інструмент для обробки даних у колекціях. Він дозволяє виконувати фільтрацію, групування, сортування та трансформації в одному pipeline. Використовується для складних аналітичних запитів, звітності та підготовки даних до візуалізації.
Повне пояснення
Що це і навіщо Aggregation framework — набір операторів, що формують pipeline. Кожен етап (stage) приймає вхідні документи, обробляє їх і передає далі. Це дозволяє виконувати складні трансформації без потреби в зовнішніх процесах.
Ключові принципи/терміни
pipeline– послідовність stages.stage– оператор, наприклад$match,$group,$project,$sort,$lookup.operator– внутрішня логіка, наприклад$sum,$avg,$addToSet.aggregation cursor– ітератор, що повертає результати.
Як це працює
- MongoDB читає документи з колекції.
- Кожен документ проходить через pipeline, де stages виконують трансформацію.
- Після останнього stage повертається фінальний результат.
Практика й реалізація
db.orders.aggregate([
{$match: {status: "completed"}},
{$group: {_id: "$customerId", total: {$sum: "$amount"}}},
{$sort: {total: -1}}
]);
Тестування – можна використовувати jest з mongodb-memory-server:
const {MongoMemoryServer} = require('mongodb-memory-server');
// підключення, вставка тестових даних, виклик aggregate і перевірка результату
Оптимізація запитів
- Створюйте
indexна полях, що використовуються в$matchі$sort. - Використовуйте
explain('executionStats')для аналізу плану. - Обмежуйте кількість документів на етапах за допомогою
$limit.
Безпека – Aggregation framework не піддається SQL‑ін’єкції, але слід уникати небезпечних $where операторів.
Особливості в контексті MongoDB – підтримка $lookup для join‑подібних операцій, $facet для паралельних підзапитів, $bucket/$bucketAuto для групування за діапазонами.
Часті помилки – забувають про index на $match, використання $project після $group без потрібних полів, неправильне типування у $addFields.