Объедините несколько таблиц в mongodb, чтобы получить массив значений идентификаторов из другой таблицы

#mongodb

Вопрос:

Я пытаюсь объединить две таблицы и получить некоторые дополнительные данные на основе массива идентификаторов из одной таблицы в другую с помощью mongodb. Одна коллекция связана с «Пользователем», а другая-с «Заказом». Коллекция пользователей содержит массив идентификаторов, связанных с заказом, а таблица заказов содержит имя заказа и другие данные. Мне нужно перечислить всех пользователей со всеми именами заказов и данными с подробными сведениями о пользователе.

Напр.:

 User Collection:

User = [{
_id: ObjectId,
userId: 1,
userName: "User1",
OrderIds: [{oId: 1},{oId:3}]
},
{
_id: ObjectId,
userId: 2,
userName: "User2",
OrderIds: [{oId: 2},{oId:3}]
}]
--------------------------------------------
Order Collection:

Order = [{
_id: ObjectId,
orderId: 1
orderName: "Pen"
},
{
_id: ObjectId,
orderId: 2
orderName: "Book"
},
{
_id: ObjectId,
orderId: 3
orderName: "Chair"
}]
---------------------------------------------------

Desired Output:
-----------------------------------------------------
Output = [{
_id: ObjectId,
userId: 1,
userName: "User1",
OrderIds: [{oId: 1,oName: "Pen"},{oId:3,oName: "Chair"}]
},
{
_id: ObjectId,
userId: 2,
userName: "User2",
OrderIds: [{oId: 2,oName: "Book"},{oId:3,oName: "Chair"}]
}]
 

Пожалуйста, у кого-нибудь есть идея, как это сделать?

Ответ №1:

Используйте $lookup

 db.users.aggregate([
  {
    "$lookup": {
      "from": "orders",
      "localField": "OrderIds.oId",
      "foreignField": "orderId",
      "as": "OrderIds"
    }
  }
])
 

mongoplayground

Комментарии:

1. Это работает.. Спасибо 🙂