Как сделать выборку из двух коллекций в MongoDB?

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

Для примера, давайте рассмотрим ситуацию, когда у нас есть две коллекции: "users" и "orders". Коллекция "users" содержит информацию о пользователях, а коллекция "orders" - информацию о заказах, причем каждый документ в коллекции "orders" имеет поле "userId", по которому можно связать его с конкретным пользователем из коллекции "users".

Для объединения данных из обеих коллекций можно воспользоваться операцией $lookup, которая выполняет операцию "left outer join" между документами двух коллекций. Ниже приведен пример запроса на языке запросов MongoDB, который объединяет данные из коллекций "users" и "orders":

db.users.aggregate([
  {
    $lookup: {
      from: "orders",
      localField: "_id",
      foreignField: "userId",
      as: "userOrders"
    }
  },
  {
    $unwind: "$userOrders"
  },
  {
    $project: {
      _id: 1,
      name: 1,
      email: 1,
      orderDate: "$userOrders.date",
      totalAmount: "$userOrders.amount"
    }
  }
])

В данном запросе мы объединяем коллекцию "users" с коллекцией "orders" по полю "_id" из "users" и "userId" из "orders". Далее мы разворачиваем объединенный массив "userOrders" и проецируем нужные нам поля, например, имя пользователя, email, дату заказа и общую сумму заказа.

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