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

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

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

Предоставьте код и расскажите, что вы сделали и чего хотите достичь. Без кода никто вам не поможет.

Subha 06.06.2024 15:40

Я согласен, что более подробная информация здесь поможет. В то же время, возможно, вас могут заинтересовать Views?

user20042973 06.06.2024 17:11
Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
1
2
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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,
]);

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

Как вы определяете более читабельность, тестируемость и возможность повторного использования? Без четкого определения этот пост кажется самоуверенным вопросом и ответом. Можно также возразить, что отображение переменных и этапов агрегирования может быть трудным для чтения, если задействовано много этапов.

ray 06.06.2024 17:52

Читабельно: эта агрегация состоит из 3 этапов, которые вы можете увидеть сразу, без анализа большого JSON. Тестируемость: небольшие фрагменты, которые можно закомментировать для облегчения тестирования без необходимости использования большого JSON. Многоразовое использование: после определения там или в функции (где вы можете их параметризовать) вы можете повторно использовать их в других частях вашего кода.

Diego Freniche 06.06.2024 17:55

Другие вопросы по теме

Файл cookie экспресс-сессии не отправляется во внешний интерфейс, если я устанавливаю secure=true в сеансе выражения
Решение проблем с проверкой подписи Webhook в Stripe с помощью Express.js
Клиент Thunder, зашифрованный пароль невозможен для входа в систему, произошла ошибка сервера
Почему я могу отлично протестировать метод удаления в Postman, но не в браузере?
Изображения не отображаются на стороне клиента
TS2339: ошибка расширения экспресс-запроса (например, req.payload)
Во время тестирования с клиентом Thunder приходят все данные, но данные не поступают по определенному идентификатору или параметру
Конечная точка запроса на Express не перестанет загружаться, даже если я установлю статус ответа (проблемы с Multer и Express)
API конвертера файлов HTML в PDF работает в локальной среде, но не при развертывании (node.Js, Express.Js, html-pdf, веб-службы Azure)
Форма регистрации — входные данные извлекают нулевые значения из внешнего интерфейса в базу данных (Express/PostgreSQL)