Я прошу прощения за длинный вопрос. В настоящее время я использую 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" }
?
Заранее спасибо!