Mongodb 按工作日汇总文档
对于集合中的每个学生,我都有一个Mongodb 按工作日汇总文档,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,对于集合中的每个学生,我都有一个缺勤数组。我想通过显示一周中每天的缺勤次数来总结数据 考虑到以下输入: { "_id" : 9373, "absences" : [ { "code" : "U", "date" : ISODate("2021-01-17T00:00:00.000+0000")
缺勤
数组。我想通过显示一周中每天的缺勤次数来总结数据
考虑到以下输入:
{
"_id" : 9373,
"absences" : [
{
"code" : "U",
"date" : ISODate("2021-01-17T00:00:00.000+0000"),
"full_day" : false,
"remote" : false,
"dayNumber" : 1,
"dayName" : "Sunday"
}
]
}
{
"_id" : 9406,
"absences" : [
{
"code" : "E",
"date" : ISODate("2020-12-09T00:00:00.000+0000"),
"full_day" : false,
"remote" : false,
"dayNumber" : 4,
"dayName" : "Wednesday"
},
{
"code" : "U",
"date" : ISODate("2021-05-27T00:00:00.000+0000"),
"full_day" : false,
"remote" : false,
"dayNumber" : 5,
"dayName" : "Thursday"
}
]
}
如何实现以下输出:
[
{
"_id": 9373,
"days": [
{
"dayNumber": 1,
"dayName": "Sunday",
"count": 1
}
]
},
{
"_id": 9406,
"days": [
{
"dayNumber": 4,
"dayName": "Wednesday",
"count": 1
},
{
"dayNumber": 5,
"dayName": "Thursday",
"count": 1
}
]
}
]
我已将所有必需字段推送到管道的此阶段。我只是不清楚如何在嵌套的缺席
数组中汇总数据。
解构$unwind
数组缺勤
通过$group
和\u id
获取分组文档的计数日数
按$group
分组并重建\u id
数组天
非常感谢您。我想做的最后一个调整是按天数对结果进行排序。添加
{“$sort”:{“\u id”:1,“days.dayNumber”:1.0}
不会起作用。有什么想法吗?对于内部天数数组排序,将排序放在最后一个$group阶段之前,根级别文档排序放在最后一个阶段。看见
db.collection.aggregate([
{ $unwind: "$absences" },
{
$group: {
_id: {
_id: "$_id",
dayNumber: "$absences.dayNumber"
},
dayName: { $first: "$absences.dayName" },
count: { $sum: 1 }
}
},
{
$group: {
_id: "$_id._id",
days: {
$push: {
dayName: "$dayName",
dayNumber: "$_id.dayNumber",
count: "$count"
}
}
}
}
])