Mongo db query Для запросов соединения - PullRequest
0 голосов
/ 31 октября 2018

У меня есть два разных объекта

  1. Пользователь

  2. UserGroup

Пользователь

{
          _id:1,
          Name:'name',
          Usergroup:
      [

                        {
                                '$ref' : 'UserGroup',
                                '$id' : 1
                         },

                         {
                                '$ref' : 'UserGroup',
                                '$id' : 2
                        }]


 }

UserGroup

{
                         _id:1,
                          name: 'admin'
                  },{
                        _id:2,
                         name: 'admin1'
 }

Мне нужно получить коллекцию групп пользователей вместе со списком пользователей, может кто-нибудь помочь мне при написании запроса на присоединение, пожалуйста.

1 Ответ

0 голосов
/ 01 ноября 2018

Вы можете использовать $lookup в монго, чтобы объединить две коллекции.

  db.user_collection_name.aggregate(
{
    $project: { 
        group_id: {
          $map: { 
             input: { 
                  $map: {
                      input:"$userGroup",
                      in: {
                           $arrayElemAt: [{$objectToArray: "$$this"}, 1]
                      },
                  }
             },
             in: "$$this.v"}},
             "name":1
        }
}, 
    {$lookup:
         {
           from: userGroup_collection_name,
           localField: "group_id",
           foreignField: _id,
           as: users
         }
    })

Пояснение:
Внутри агрегатора тип DBRef BSON может обрабатываться как объект с двумя или тремя полями (ref, id и DB). Поэтому нам нужно абстрагировать ключ, значение из поля dbref. Поэтому нам нужна функция $project, чтобы взять Id, тогда мы можем $lookup, используя этот идентификатор.

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