Масштабируемость агрегации в mongodb

Я использую агрегатный метод в Mongodb для выполнения запросов, мне очень легко устанавливать связи между другими документами или определенными преобразованиями. Я дошел до того, что мне приходится копировать различные части одного запроса в другой, особенно в $lookups и некоторых других вещах. У меня такое ощущение, что я использую много шаблонов, а также, когда мне нужно изменить поведение запроса, мне приходится вносить изменения в несколько частей кода, где выполняется один и тот же запрос.

Есть ли шаблон проектирования, позволяющий улучшить это? или, возможно, это обрабатывается по-другому? при условии, что он масштабируем и необходимо вносить минимальное количество изменений в код при появлении новых требований. Любой ресурс или помощь приветствуются. Большое спасибо, я новичок в Mongodb. Кстати, я обычно используюnesjs и выражаю

🤔 А знаете ли вы, что...
MongoDB предоставляет средства для миграции данных из других СУБД в MongoDB...


51
1

Ответ:

Решено

Конвейер агрегации MongoDB — это язык Тьюринга, основанный на композиции функций. Только не используйте его как большой документ JSON, разбейте агрегацию на части, как в этом примере:

db.books.aggregate([
    {$match: {year: 1985, pages: 150}}, {$project: {_id: 0, title: 1, year: 1, totalInventory: 1, available: 1}}, {$limit: 15}
])

Должно быть написано как:

let booksFrom1985With150pages = {$match: {year: 1985, pages: 150}};
let showOnlyTheseFields = {$project: {_id: 0, title: 1, year: 1, totalInventory: 1, available: 1}};
let getJust15books =  {$limit: 15};

db.books.aggregate([
    booksFrom1985With150pages,
    showOnlyTheseFields,
    getJust15books,
]);

Что, как вы можете видеть, более читабельно, тестируемо, пригодно для повторного использования и т. д.


Интересные вопросы для изучения