[英]Multiple nested grouping in MongoDB Aggregation
我的 mongoDB 集合中有上千个文档,其中每个文档代表这样一首歌曲的数据:
{
"_id": ObjectID("612e03a790c3d3189845589b"),
"artist": "3 Doors Down",
"title": "Landning in London",
"album": "Another 700 Miles",
"genre": "Seventeen Days",
"trackNumber": 5,
"year": 2005,
"rating": 3,
"duration": "4:32",
"country": "United States",
}
现在在聚合管道的帮助下,我想按以下方式对我的 collections 进行分组。 到目前为止,我可以为 1 个阶段进行分组,但我很难将完整的根文档推到最后并进行嵌套分组。
列出所有类型 --> 列出该类型中的所有艺术家 --> 列出该类型中该艺术家的所有专辑 --> 列出该专辑所有歌曲的 COMPLETE 根文档:
{
[
{
"genreName": "Alternative Rock",
"artists": [
{
"artistName": "3 Doors Down",
"albums": [
{
"albumName": "Seventeen Days",
"songs": [
{
"_id": ObjectID(612e03a790c3d3189845589b),
"artist": "3 Doors Down",
"title": "Landning in London",
"album": "Another 700 Miles",
"genre": "Seventeen Days",
"trackNumber": 5,
"year": 2005,
"rating": 3,
"duration": "4:32",
"country": "United States",
}
]
}
]
}
]
}
]
}
这个应该工作:
db.collection.aggregate([
{
$group: {
_id: { genreName: "$genre", artistName: "$artist", albumName: "$album" },
songs: { $push: "$$ROOT" }
}
},
{
$group: {
_id: { genreName: "$_id.genreName", artistName: "$_id.artistName" },
albums: { $push: { albumName: "$_id.albumName", songs: "$songs" } }
}
},
{
$group: {
_id: "$_id.genreName",
artists: { $push: { artistsName: "$_id.artistsName", albums: "$albums" } }
}
},
{ $project: { _id: 0, genreName: "$_id", artists: 1 } }
])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.