Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 按工作日汇总文档_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

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"
        }
      }
    }
  }
])