Left Outer Join в mon goose для нескольких полей образует коллекцию с несколькими коллекциями (Aggregate & lookups) - PullRequest
0 голосов
/ 05 февраля 2020

Я новичок в пн goose совокупность. Как получить левое внешнее объединение для нескольких полей с помощью одной агрегатной функции

Collection1

{
 c1_field1,
 c1_field2,
 c1_field3
}

Collection2

{
 c2_field1(refs Collection1 c1_field1),
 c2_field2,
 c2_field3
}

Collection3

{
 c3_field1(refs Collection1 c1_field2),
 c3_field2,
 c3_field3
}

Помогите мне добиться результата примерно так:

{
 collection2_with_ref:[{
               c2_field1,
               c2_field2,
               c2_field3
               },..],
 collection3_with_ref:[{
               c3_field1,
               c3_field2,
               c3_field3
               },..],
 c1_field3
}

Спасибо ... Я действительно хочу знать, можно ли достичь вышеупомянутого или нет

1 Ответ

0 голосов
/ 06 февраля 2020

Не проверял, но в целом вы можете сделать это, используя $ lookup :

db.Collection1.aggregate([
   {
     $lookup:
       {
         from: "Collection2",
         localField: "c1_field1",
         foreignField: "c2_field1",
         as: "collection2_with_ref"
       }
  },{
     $lookup:
       {
         from: "Collection3",
         localField: "c1_field2",
         foreignField: "c3_field1",
         as: "collection3_with_ref"
       }
  }
])

Это добавит два новых массива к существующим документам, если вы захотите удалить c1_field1, c1_field2 используйте $ project , чтобы исключить эти поля, или вы можете указать соответствующее имя поля в $lookup as, чтобы они были заменены массивами результатов $lookup.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...