首页 > 解决方案 > MongoDB 时间 小时和分钟的差异

问题描述

我有一个包含以下模式的文档的集合

{
    "_id" : ObjectId("5f80656ce4e67b176f05fde5"),
    "owner" : ObjectId("5f120ba1578d051b20fb53e3"),
    "checkedInTime" : ISODate("2020-10-09T03:58:12.837-06:30"),
    "checkedOutTime" : ISODate("2020-10-09T07:12:10.906-06:30"),
    "punchIn" : true,
    "punchOut" : true,
    "isPresent" : true,
    "punchStatus" : false,
    "user" : {
        "_id" : ObjectId("5f120ba1578d051b20fb53e3"),
        "emp_code" : 82140,
        "emp_firstname" : "rahul",
        "emp_secondname" : "narayanan unni",
        "emp_gender" : "Male",
        "dept_name" : "office",
        "avatar" : "src/assets/images/IMG-20180302-WA0025.jpg",
    }
}

我想要一个包含时间差(checkedOutTime-checkedInTime)的持续时间字段,以小时、分钟和秒(即hh:mm:ss, 12:10:03)为单位,我怎样才能在 mongodb 中获得它。

db.getCollection('logs').aggregate([
{
         $project:{
              _id:0,
              In:"$checkedInTime",
              Out:"$checkedOutTime",
              Duration:{ 
                  $divide:[{$subtract: ["$checkedOutTime", "$checkedInTime"]},3600000]
                   /* i.e in hours,minute,&seconds (i.e hh:mm:ss, 12:10:03) */
              },
              Name : { $concat: [ "$user.emp_firstname","  ","$user.emp_secondname" ] }, 
              EmpCode:"$user.emp_code",
              Department:"$user.dept_name",
             }
       }
]}

刚接触mongodb请帮忙,谢谢

标签: mongodb

解决方案


一种可能性是:

db.collection.aggregate([
  {
    $set: {
      Duration: {
        $dateToString: {
          date: {
            $dateFromParts: {
              year: 1970,
              millisecond: { $subtract: [ "$checkedOutTime", "$checkedInTime" ] }
            }
          },
          format: "%H:%M:%S"
        }
      }
    }
  }
])

请注意,它仅适用于少于 24 小时的持续时间。您可以使用$dayOfYear366 天。但是,您必须减去 1 天,因此在这种情况下需要进行一些编码。

也许看看这个:Mongodb collection objects total hours collection


推荐阅读