如何解决在聚合框架中进行多次分组,保留多个字段
我需要将集合多个字段的多个时间分组。
我在聚合框架中尝试过$group
,但是由于无法保存所需的其他字段,我可能会犯一个错误。
这里是示例:
[
{
"courseTitle": "Master 1","courseCompleted": false,"module_id": "m01","section": "01 - Introduction","order": 1,"completed": true,"moduleTitle": "Module 1"
},{
"courseTitle": "Master 1","module_id": "m02","order": 2,"moduleTitle": "Module 2"
},"module_id": "m03","order": 3,"completed": false,"moduleTitle": "Module 3"
},"module_id": "m04","section": "02 - First test","order": 4,"moduleTitle": "Module 4"
}
]
我需要先按部分分组,然后按courseTitle
和courseCompleted
字段分组:
[
{
"courseTitle": "Master 1","sections": [
{
"section": "01 - Introduction","modules": [
{
"module_id": "m01","moduleTitle": "Module 1"
},{
"module_id": "m02","moduleTitle": "Module 2"
},{
"module_id": "m03","moduleTitle": "Module 3"
},]
},{
"section": "02 - First test","modules": [
{
"module_id": "m04","moduleTitle": "Module 4"
}
]
}
]
}
]
操场上的例子:https://mongoplayground.net/p/ThqXLYmQTCe
解决方法
您需要运行$group才能获得嵌套数组:
db.collection.aggregate([
{
$group: {
_id: { courseTitle: "$courseTitle",section: "$section",courseCompleted: "$courseCompleted" },modules: { $push: { module_id: "$module_id",order: "$order",completed: "$completed",moduleTitle: "$moduleTitle" } }
}
},{ $sort: { "_id.section": 1 } },{
$group: {
_id: { courseCompleted: "$_id.courseCompleted",courseTitle: "$_id.courseTitle" },sections: { $push: { section: "$_id.section",modules: "$modules" } }
}
},{
$project: {
_id: 0,courseTitle: "$_id.courseTitle",courseCompleted: "$_id.courseCompleted",sections: 1
}
}
])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。