Как объединить два результата коллекции и другую коллекцию, используя mongodb - PullRequest
1 голос
/ 21 июня 2019

Я попытался объединить вывод двух коллекций и одну коллекцию. Но не получается, как объединить результаты двух коллекций, присоединиться к одной выборке с помощью mongodb

рекламная коллекция

[{
    "id":1,
    "name":"latest",
    "product":[{
                 "id":3,
              }]

}]

коллекция продуктов

[{
     "id":3,
     "product_name":"bourbon",
     "category_id": 18
}]

Категория Коллекция

[{
   "id":10,
   "name":"laptop"
}]

Код отображения

db.promotion.aggregate([{$lookup:{
            from:'product',
            localField:'products',
            foreignField:'id',
            as:'products'
        }}]).toArray()

Я получил вывод

[{
    "id":1,
    "name":"latest",
    "product":[{
                 "id":3,
                  "product_name":"bourbon",
                  "category_id": 18
              }]

}]

Исключенный вывод

[{
    "id":1,
    "name":"latest",
    "product":[{
                 "id":3,
                  "product_name":"bourbon",
                  "name":"laptop"
              }]

}]

Как этого добиться. Этот сценарий

1 Ответ

1 голос
/ 21 июня 2019

Вы можете использовать ниже агрегации

db.promotion.aggregate([
  { "$lookup": {
    "from": "product",
    "let": { "products": "$products" },
    "pipeline": [
      { "$match": { "$expr": { "$eq": ["$id", "$$products"] } } },
      { "$lookup": {
        "from": "category",
        "let": { "category_id": "$category_id" },
        "pipeline": [
          { "$match": { "$expr": { "$eq": ["$id", "$$category_id"] } } }
        ],
        "as": "category"
      }},
      { "$project": {
        "id": 1,
        "product_name": "bourbon",
        "name": { "$arrayElemAt": ["$category.name", 0] }
      }}
    ],
    "as": "product"
  }}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...