Пн go БД Поиск массива объектов в другой коллекции - PullRequest
1 голос
/ 07 мая 2020

Проблема в том, что у меня есть массив объектов в каждом документе (поле комментариев) моей коллекции сообщений. У каждого объекта есть свойство commentAuthorId. Вещь, которую я не хочу делать, - это выполнять поиск по каждому объекту в массиве комментариев и вставлять в этот объект информацию об авторе комментария на основе упомянутого ранее "commentAuthorId". Информация о пользователе находится в другой коллекции под названием «Пользователи». Вот то, что я пробовал до сих пор, но это не работает.

    {
      $unwind: '$comments'
    },
    {
      $lookup: {
        from: "Users",
        localField: "comments.commentAuthorId",
        foreignField: "_id",
        as: "commentAuthorDetails",
      },
    },
    {$group: {  
      _id: "$_id",
      comments: {
        $push: {
            _id: "$comments._id",
            authorDetails: "$commentAuthorDetails"
        }
      }
    }

Пример документа - Сообщения:

 {
   "_id":{
      "$oid":"5eb2ed9f4c53d52b8c69f01b"
   },
   "createdBy":"5e45bf41e2465801801455d9",
   "postContent":"dasdsa\n#lazyloadingtest\n      ",
   "tags":[
      "lazyloadingtest"
   ],
   "addedAt":{
      "$date":"2020-05-06T17:02:23.138Z"
   },
   "likes":[

   ],
   "likesCount":0,
   "comments":[
      {
         "content":"afdsfsdf",
         "author":"Kacper",
         "postId":"5eb2ed9f4c53d52b8c69f01b",
         "commentAuthorId":"5e45bf41e2465801801455d9",
         "addedAt":{
            "$date":"2020-05-06T17:02:25.167Z"
         },
         "_id":{
            "$oid":"5eb2eda14c53d52b8c69f01c"
         }
      }
   ]
}

Пример документа - Пользователь:

{
   "_id":{
      "$oid":"5e45bf41e2465801801455d9"
   },
   "name":"Kacper",
   "email":"kacper@kacper.pl",
   "password":"$2b$12$QeCw0AKlRI1kjAJc6eM5hOvxc5gRk/FhuI9vDcGLitsrSkHQZp8ky",
   "userPicture":null
}

Ожидается результат агрегирования поиска:

{
  "_id":{
     "$oid":"5eb2ed9f4c53d52b8c69f01b"
  },
  "createdBy":"5e45bf41e2465801801455d9",
  "postContent":"dasdsa\n#lazyloadingtest\n      ",
  "tags":[
     "lazyloadingtest"
  ],
  "addedAt":{
     "$date":"2020-05-06T17:02:23.138Z"
  },
  "likes":[

  ],
  "likesCount":0,
  "comments":[
     {
        "content":"afdsfsdf",
        "author":"Kacper",
        "postId":"5eb2ed9f4c53d52b8c69f01b",
        "commentAuthorId":"5e45bf41e2465801801455d9",
        "addedAt":{
           "$date":"2020-05-06T17:02:25.167Z"
        },
        "_id":{
           "$oid":"5eb2eda14c53d52b8c69f01c"
        },
        "postAuthorInfo": {
          "_id":{
             "$oid":"5e45bf41e2465801801455d9"
          },
          "name":"Kacper",
          "email":"kacper@kacper.pl",
          "password":"$2b$12$QeCw0AKlRI1kjAJc6eM5hOvxc5gRk/FhuI9vDcGLitsrSkHQZp8ky",
          "userPicture":null
       }
     }
  ]
}

Есть только один комментарий, но я не хочу выполнять этот поиск для каждого следующего комментария в поле "commentAuthorId".

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