искать одну и ту же коллекцию несколько раз, из встроенного документа в монго - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть встроенный документ постов и комментариев. Где комментарии - это встроенный документ с данными пользователя commentedby. Существует большая вероятность того, что имя пользователя часто меняется. Таким образом, значение пользователя необходимо искать при каждом обращении к комментарию.

Есть ли эффективный способ сделать это с помощью запроса монго. Я не предпочитаю использовать размотку Так как при повторной группировке я потеряю другие параметры сообщения

{
    "PostId":"Post001",
    "Comments":[
         {"_id": "001",
          "CommentedBy":{
            "_id":"User001",
            "Name":"UserName001",
            "email":"user001@eg.com"
            }
         },
         {"_id": "002",
           "CommentedBy":{
            "_id":"User002",
            "Name":"UserName002",
            "email":"user001@eg.com"
            }
         },
         {"_id": "003",
          "CommentedBy":{
            "_id":"User003",
            "Name":"UserName003",
            "email":"user001@eg.com"
            }
         }
    ]
}

Пользовательский документ состоит не только из имени пользователя и идентификатора. Использование нескольких поисков может закончиться ссылкой User001 Несколько раз.

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

{
        "PostId":"Post001",
        "Comments":[
             {"_id": "001",
              "CommentedBy":{
                "_id":"User001",
                "Name":"UserName001",
                "email":"user001@eg.com",
                "Group":"Marketing",
                "Location":"India"                }
             },
             {"_id": "002",
               "CommentedBy":{
                "_id":"User002",
                "Name":"UserName002",
                "email":"user002@eg.com",
                "Group":"Engineering",
                "Location":"USA"         
                }
             },
             {"_id": "003",
              "CommentedBy":{
               "_id":"User002",
                "Name":"UserName002",
                "email":"user002@eg.com",
                "Group":"Engineering",
                "Location":"USA"      
                }
             }
        ]
    }

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

User = [
  {
  "_id":"User001",
  "Name":"UserName001",
  "email":"user001@eg.com",
  "Group":"Marketing",
  "Location":"USA"      
  },
  {
  "_id":"User002",
  "Name":"UserName002",
  "email":"user002@eg.com",
  "Group":"Engineering",
  "Location":"USA"      
  }
  ...
  ...
]

запрос, который я пытался

db.getCollection('Posts').aggregate([
    {$lookup:{
           from: "User",
           localField: "Comments.CommentedBy._id",
           foreignField: "_id",
           as: "Comments.CommentedBy"
   }},
])
  1. Будет ли это эффективно для n-записей с n-комментариями
  2. Будет ли монго выполнять какую-то оптимизацию при поиске User002, поскольку его нужно искать дважды.
  3. Если CommentedBy - это список пользователей, как сделать $ lookup в этом случае
...