Цепная агрегация поиска mongoDB нескольких коллекций - PullRequest
0 голосов
/ 19 октября 2019

Привет, ребята, я хочу спросить.

Итак, у меня есть 3 коллекции:

  1. brand: (brandId, brandName и т.д ...)
  2. partner: (partnerId, partnerName и т. д.)
  3. партнерство: (partnersipId, brandId, partnerId и т. д.) *

Как видите, я хочу присоединиться к партнеруколлекция с партнерством коллекция по partnerId, и я уже присоединился к этому. Но мне нужно, чтобы brandName стал брендом в сфере партнерских коллекций. Я уже пробовал этот запрос:

db.getCollection('partner').aggregate([
    {
        $match: { partnerId: 107 }
    },
    {"$lookup":
        {
            "from" : "partnership",
            "localField" : "partnerId",
            "foreignField" : "partnerId",
            "as" : "partnership"
        }
    },
    {"$lookup" :
        {
            "from" : "brand",
            "localField" : "partnership.brandId",
            "foreignField" : "partnership.brandId",
            "as" : "partnership.brand"
        }
    }])

Но не повезло: (

Ожидаемый результат:

{
    partnerId: 107,
    partnerName: 'TEST',
    partnership: [
        {
            partnerId: 107,
            partnershipId: 'd8b674ab-3c3d-4772-b5e8-81b4c0279424',
            brandId: 66
            brandName: 'BrandNameId66'
        },
        {
            partnerId: 107,
            partnershipId: '13246d75-59ed-47c2-82c5-54f73ad25cf0',
            brandId: 77
            brandName: 'BrandNameId77'
        }
    ]
}

Текущий результат:

{
    partnerId: 107,
    partnerName: 'TEST',
    partnership: {
        brand: [
            {
                brandId: 1,
                brandName: 'BrandNameId1'
            },
            ...
        ]
    }
}

Пожалуйста, помогите мне. Спасибо!

1 Ответ

1 голос
/ 19 октября 2019

Вам нужно сначала раскрутить партнерство перед следующим поиском как:

db.getCollection('partner').aggregate([
    {
        $match: { partnerId: 107 }
    },
    {"$lookup":
        {
            "from" : "partnership",
            "localField" : "partnerId",
            "foreignField" : "partnerId",
            "as" : "partnership"
        }
    },
    {$unwind:{path: "$partnership", preserveNullAndEmptyArrays: true}}
    {"$lookup" :
        {
            "from" : "brand",
            "localField" : "partnership.brandId",
            "foreignField" : "partnership.brandId",
            "as" : "partnership.brand"
        }
    }
    {$group:{
      _id:"$_id",
      partnerId:{$min:"$partnerId"},
      partnerName:{$min:"$partnerName"},
      partnership:{$push:"$partnership"}
    }}
])
...