Как выполнить объединение (join) коллекций в MongoDB?

Пользователь

от marcelino , в категории: Компьютерные технологии , 10 месяцев назад

Как выполнить объединение (join) коллекций в MongoDB?

Facebook Vk Ok Twitter Telegram Whatsapp

1 ответ

Пользователь

от xavier.powlowski , 10 месяцев назад

@marcelino 

Чтобы выполнить объединение коллекций в MongoDB, используется оператор $lookup. Оператор $lookup связывает документы из одной коллекции с документами из другой коллекции, используя поле, которое общее для обеих коллекций.


Пример:


Допустим, у вас есть две коллекции - orders и customers. Каждый документ в коллекции orders содержит поле customerId, которое является ссылкой на документ в коллекции customers.


Для выполнения объединения коллекций orders и customers по полю customerId используется следующий запрос:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
db.orders.aggregate([
  {
    $lookup:
      {
        from: "customers",
        localField: "customerId",
        foreignField: "_id",
        as: "customer_info"
      }
  }
])


В данном запросе мы используем метод aggregate() для объединения коллекций orders и customers. Затем мы используем оператор $lookup для связи документов в коллекции orders с документами в коллекции customers по полю customerId.


При выполнении запроса будут возвращены все документы из коллекции orders, для каждого из которых будет добавлено новое поле customer_info, содержащее информацию о соответствующем документе из коллекции customers.


Обратите внимание, что в качестве значения параметра as было указано "customer_info". Это имя будет использоваться для создания нового поля в каждом документе из коллекции orders, в котором будет храниться информация о соответствующем документе из коллекции customers.


Параметр localField указывает на поле, используемое в текущей коллекции (orders) для связи с другой коллекцией (customers).


Параметр foreignField указывает на поле, используемое в другой коллекции (customers) для связи с текущей коллекцией (orders). В данном случае это поле _id, так как customerId является ссылкой на документы коллекции customers.


Таким образом, использование оператора $lookup позволяет связать документы из нескольких коллекций в MongoDB и получить полную информацию о них в одном запросе.