Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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_Mongoose - Fatal编程技术网

用于计算出勤率的mongodb聚合

用于计算出勤率的mongodb聚合,mongodb,mongoose,Mongodb,Mongoose,我有一个集合,其中包含具有以下值的文档 { "_id": ObjectID("XXXXXX"), "more details" :more details "attendance": [ { "date": ISODate("2015-08-11T18:30:00.000Z"), "students": [ { "studentId": ObjectID("YYYYYY"),

我有一个集合,其中包含具有以下值的文档

{
 "_id": ObjectID("XXXXXX"),
 "more details" :more details
 "attendance": [
    {
        "date": ISODate("2015-08-11T18:30:00.000Z"),
        "students": [
            {
                "studentId": ObjectID("YYYYYY"),
                "entryTime": ISODate("1970-01-01T05:41:00.000Z"),
                "exitTime": ISODate("1970-01-01T05:41:00.000Z"),
                "attendanceStatus": "Present"
            },
            {
                "studentId": ObjectID("ZZZZZZ"),
                "entryTime": ISODate("1970-01-01T06:42:00.000Z"),
                "exitTime": ISODate("1970-01-01T06:42:00.000Z"),
                "attendanceStatus": "Present"
            }
        ]
    },
    {
        "date": ISODate("2015-08-12T18:30:00.000Z"),
        "students": [
            {
                "studentId": ObjectID("XXXXX"),
                "entryTime": ISODate("1970-01-01T05:41:00.000Z"),
                "exitTime": ISODate("1970-01-01T06:42:00.000Z"),
                "attendanceStatus": "Present"
            },
            {
                "studentId": ObjectID("YYYYY"),
                "entryTime": ISODate("1970-01-01T05:41:00.000Z"),
                "exitTime": ISODate("1970-01-01T06:42:00.000Z"),
                "attendanceStatus": "Absent"
            }
        ]
    }
  ]
}
我试图得到一个学生出席的天数和缺席的天数。但我一直得到未定义的输出

var pipeline = [
            {
                "$match": {_id: mongoose.Types.ObjectId(batchId)}
            },
            {
                "$project": {attendance: '$attendance.students'}
            },
            {
                "$group": {
                    "studentId": "$studentId"
                    ,
                    "Present": {
                        "$sum": {
                            "$cond": [{"$eq": ["attendanceStatus", "Present"]}, 1, 0]
                        }
                    },
                    "Absent": {
                        "$sum": {
                            "$cond": [{"$eq": ["attendanceStatus", "Absent"]}, 1, 0]
                        }
                    }
                }
            }
        ];

我无法找出我错过了什么

请尝试此管道

var pipeline = [{$unwind: '$attendance'}, 
                {$unwind: '$attendance.students'}, 
                {$group: {
                    _id: '$attendance.students.studentId', 
                    "Present": {
                        "$sum": {
                            "$cond": [
                                 {"$eq": ["$attendance.students.attendanceStatus", "Present"]},
                                  1, 
                                  0]
                        }
                     },
                     "Absent": {
                        "$sum": {
                            "$cond": [
                                 {"$eq": ["$attendance.students.attendanceStatus", "Absent"]},
                                   1,
                                   0]
                        }
                    }}}]

正如前面提到的,记录这些数据或数据转换作业的代码显然有一些可怕的错误。虽然在外部数组中有一个主日期,即
ISODate(“2015-08-11T18:30:00.000Z”)
,但内的每个项目似乎只将“小时”添加到纪元日期
ISODate(“1970-01-01T05:41:00.000Z”)
中,而不是添加到基准日期中,因为它们可能是
ISODate(“2015-08-11T05:41:00.000Z”)
。所以,在它最终咬你之前,你可能会看看它。另外,如果您使用的是MongoDB 3.2,那么还有一种更有效的方法。@BlakesSeven,感谢您提供的信息,我明白您的意思,输入类型“time”默认设置为1970。我会调查的,非常感谢。我们将要迁移到3.2版,有没有关于我应该看什么的建议?