Если вы использовали MongoDB и mongoose вместе, возможно, вы действительно оказались в ситуации, подобной этой:

В этом случае у нас есть схема со свойством «платформы», которое по сути представляет собой массив объектов.

Здесь следует отметить ключевой момент: каждая «платформа» - это модель, уже определенная в нашем проекте, и то, что мы здесь делаем, пытается поддерживать связь между учетной записью и платформами, для которых она действительна. Если вы пришли из мира SQL, это, по сути, пара таблиц, подготовленных для объединения.

В зависимости от варианта использования мы хотели бы, чтобы эти коллекции были заполнены или нет фактическими «платформами». У нас есть несколько стратегий для достижения этой цели.

Прежде всего, сохраните массив со ссылками

По моему опыту, лучший способ поддерживать отношения этого типа - сохранять только массив идентификаторов вместо объектов массива. Нет ничего плохого в том, чтобы иметь массив объектов в свойстве вашей модели, на самом деле NoSQL идеально подходит для этого; проблема в том, что мы злоупотребляем свободой.

Иногда в прошлом я сталкивался с ситуацией, когда в модели было слишком много вложенных свойств. Я закончил работу с очень сложными запросами и гигантскими документами, с которыми было действительно трудно работать.

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

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

Заполнить вручную

Это самый уродливый, но, возможно, более разумный вариант, если вы учитесь работать с такой библиотекой, как мангуст. Здесь особо нечего объяснять, в основном вам нужно будет сделать пару запросов, чтобы получить записи, на которые ссылаются идентификаторы.

Это "нормально", если вы делаете это только один раз во всем своем приложении и если у вас действительно нет времени на минимальную настройку или вы не хотите менять модель.

Но, честно говоря, мы всегда так поступаем, потому что не знаем других вариантов. Итак, перейдем к наиболее популярным.

Заселить мангустом

Сам Mongoose предоставляет метод под названием populate, который является альтернативой для оператора агрегации $ lookup в MongoDB. Как мы можем найти в документации:

Заполнение - это процесс автоматической замены указанных путей в документе документами из другой коллекции (ов).

И это именно то, что мы хотим сделать;) Очень легко заполнить ссылки с помощью мангуста, нам просто нужно настроить некоторые поля в модели и вызвать функцию «заполнить» в запросах, определяя поле, которое нужно заполнить, и вуаля.

Если вам нужен пример функции заполнения мангуста, посмотрите официальную документацию.

Используйте пакет npm

Собственная функция заполнения Mongoose - это здорово, но иногда мы хотим, чтобы каждое поле заполнялось автоматически ... и не круто вызывать метод populate много раз с разными аргументами. Отличным вариантом для этого является пакет npm под названием mongoose-autopopulate. Пакет использует те же настройки в модели, которые мы устанавливали ранее, и все! Плагин автоматически выполнит заполнение.

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

Regos Dev Studio - компания, занимающаяся разработкой продуктов, которая создает надстройки для Jira, Confluence и LiveChat в сочетании с разработкой индивидуальных решений на различных языках.

Не забудьте заглянуть на наш сайт, посетить наш список торговой площадки Atlassian и наши приложения для LiveChat. Вы также можете подписаться на нас в Twitter и следить за обновлениями!