Я изучаю mongodb, я искал несколько советов по всему Интернету, но все еще не могу получить правильный результат. Единственное, что мне нужно сделать, это присоединиться к 2 коллекциям.
Позвольте представить проблему.
КОЛЛЕКЦИИ
Художники
{
_id: 1,
Name: 'Artists one'
}
Альбомы
{
_id: 1,
title: "Album 01",
year
artists_id: 1
}
{
_id: 2,
title: "Album 02",
year: 2020,
artists_id: 1
}
Треки
{
albums_id: 1,
track_number: 1,
title: 'Track 01',
time: 123
}
{
albums_id: 1,
track_number: 2,
title: 'Track 02',
time: 123
}
{
albums_id: 2,
track_number: 1,
title: 'Track 01',
time: 123
}
{
albums_id: 2,
track_number: 2,
title: 'Track 02',
time: 123
}
ЧЕМ Я ХОЧУ ЗАЙДИТЬ?
запрос должен возвращать результат, как показано ниже. Альбомы следует отсортировать по годам по возрастанию. Дорожки должны быть отсортированы по track_number по возрастанию (или по убыванию, как я хочу)
{
Name: 'Artists one',
Albums: [
{
title: "Album 01",
tracks: [
{
title: 'Track 01'
},
{
title: 'Track 02'
}
]
},
{
title: "Album 02",
tracks: [
{
title: 'Track 01'
},
{
title: 'Track 02'
}
]
}
]
}
ЧЕМ Я ЗАКЛЮЧИЛСЯ?
Я могу успешно распечатать все данные с отсортированными альбомами, но я не знаю, как раскрутить треки, отсортировать их по track_number и снова сгруппировать, как в коде вверх
db.artists.aggregate([
{
$lookup:
{
from: "albums",
localField: "_id",
foreignField: "artists_id",
as: "albums"
}
},
{
$unwind: "$albums"
},
{
$lookup:
{
from: "tracks",
localField: "albums._id",
foreignField: "albums_id",
as: "albums.tracks"
}
},
{
$sort:
{
"albums.year": 1
}
},
{
$group:
{
_id : "$_id",
"Name" : { $first: "$Name" },
albums: { $push: "$albums" }
}
},
{
$project:
{
"_id":0,
"Name":1,
"albums": {"title":1, "tracks": {"title":1}}
}
}
]).pretty()
ЧТО МНЕ НУЖНО
Я знаю, что это не может быть сложно, я просто все еще пытаюсь понять структуру агрегации. Я буду очень рад, если кто-нибудь покажет мне, как сделать эту работу, а также если вы сможете дополнительно объяснить, как добиться результата, согласующегося с предположениями, о которых я упоминал ранее, но со взглядом:
{
Name: 'Artists one',
Albums: [
{
title: "Album 01",
tracks: ['Track 01' 'Track 02']
},
{
title: "Album 02",
tracks: ['Track 01' 'Track 02']
}
]
}
Код просто очень помог бы мне понять структуру агрегации.
$lookup
stackoverflow.com/a/52472998/3710490 - person Valijon   schedule 24.01.2020