У меня есть три коллекции, которые мне нужно присоединить / посмотреть."Группы" "Пользователи" "LinkedTags" "Фотографии"
Я получаю все группы из групп сбора.
group {
id: 1,
start: 10.12,
linkedUsers : [1,2,3,4,5]
}
Затем мне нужно искать / присоединяться от пользователей
user {
id: 1,
name: ""
}
Затем из связанных тегов
tag {
userId: 1,
rounds: 3,
time: 180
}
Затем из "фотографий"
photo {
userId: 1,
location: ""
}
Так что мне нужно, чтобы это было:
Group {
id: 1,
start: 10.12,
linkedUsers: [1,2,3,4],
users: [
1:{
id: 1,
name: "",
rounds: 3,
time: 180,
photos: [
1: {
id: 1,
location: ""
}
]
}
]
}
Вот чтоЯ пытался до сих пор.Я думаю, что мне нужно сделать это поэтапно, но я не понял, как это сделать.
db('groups').aggregate([
{
$lookup: {
from: 'users',
localField: 'linkedUsers',
foreignField: 'id',
as: 'users'
}
},
{
$unwind: "$users"
},
{
$lookup: {
from: 'photos',
localField: 'linkedUsers',
foreignField: 'id',
as: 'photos'
}
},
{
$unwind: "$photos"
},
{
$lookup: {
from: 'linkedTags',
localField: 'linkedUsers',
foreignField: 'id',
as: 'tags'
}
},
{
$unwind: "$tags"
},
{ $group: {
_id: null,
id: "$id",
start: '$start',
linkedUsers: "$linkedUsers",
users: {$push: {
id: "$users.id",
name: "$users.name",
rounds: "$tags.rounds",
time: "$tags.time",
photos: {$push: {
id: "$photos.id",
location: "photos.location"
}}
}}
}}
])
РЕДАКТИРОВАТЬ 1: Это первая ошибка, с которой я сталкиваюсь:
MongoError: Поле 'id' должно быть объектом-аккумулятором
Я прочитал об этом, но не понимаю, как все это сочетается.
Редактировать 2: Я исправил это, заключив группу в _id: {}
Теперь я сталкиваюсь с нераспознанным выражением '$ push'
Редактировать 3: Выполняетсяна Atlas, 4.0.4 Enterprise.