Как фильтровать и объединять документы разных коллекций одновременно в TypeORM для MongoDB? - PullRequest
0 голосов
/ 03 марта 2020

Я прошу прощения за длинный вопрос. В настоящее время я использую TypeORM of Nest. js вместе с экземпляром MongoDB для проекта. В этом проекте у меня есть пользователи и проекты. Пользователь может иметь несколько проектов, которые могут быть разделены между пользователями. Поэтому я создал две коллекции (1) пользовательский и (2) проект, которые выглядят как следующие примеры:

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

{
  "_id": <some id>,
  "username": "foo",
  "projectNames": [ "bar", "baz" ]
}

Проекты:

{
  "name": "bar",
  <some other properties>
}

{
  "name: "baz",
  <some other properties>
}

Теперь я хотел бы сделать запрос, который объединяет коллекции и возвращает мне расширенный пользовательский объект, например:

{
  "username": "foo",
  "projectNames": [ "bar", "baz" ],
  "projects": [{
      "name": "bar",
      <some other properties>
    }, {
      "name: "baz",
      <some other properties>
    }]
}

Результат не должен храниться в базе данных, он просто возвращается для дальнейшей обработки в мой код.

В качестве подхода к решению я пробовал агрегатную функцию, которую я тестировал в mongoCLI. Там у меня есть следующее командное выражение, которое может дать мне объединенные объекты:

db.user.aggregate([{ $lookup: { from: "project", localfield: "projectNames", foreignField: "name", as: "projects"}}])

Однако в TypeORM, когда я выполняю следующий код, я получаю AggregationCursor, который я могу запросить для массива документов.

this.userRepository.aggregate([{
  $lookup: {
    from: "project", localField: "projectNames",
    foreignField: "name", as: "projects"
}}]);

Есть ли в TypeORM способ для MongoDB напрямую получить результат, как в mongoCLI, и я могу отфильтровать там один документ, если мне нужен только агрегированный объект с { "username": "foo" }?

Заранее спасибо!

...