如何在mongodb中减去两个日期时间

Posted

技术标签:

【中文标题】如何在mongodb中减去两个日期时间【英文标题】:How to subtract two date time in mongodb 【发布时间】:2018-06-30 08:47:25 【问题描述】:

我用过聚合函数。

db.checkins.aggregate([
       $match: checkinType: "Beacon",
               "associationIds.organizationId":"af39bc69-1938-4149",
               "checkinData.time": "$gte": new Date("2018-01-18T18:30:00.000Z"), 
                                   "$lt": new Date("2018-01-19T18:30:00.000Z")
                
        ,
       "$sort":"checkinData.time":-1,
       $group: "_id":
                    "orgId":"$asst.organizationId", "userId":"$asst.userId",
                    "lastSeen":"$first":"$checkinData.time",
                   "firstSeen":"$last":"$checkinData.time",
               
       , 
      "$project":"_id":1,"lastSeen":1, "firstSeen":1, 
                  totalHourSpent:$subtract: ["$lastSeen","$firstSeen"], 
  ])

当我执行此查询时,mongo 以毫秒为单位返回 totalHourSpent,如下所示。


  "_id" : 
        "orgId" : "af39bc69-1938-4149-b9f7-f101fd9baf73",
        "userId" : "34adb4a0-0012-11e7-bf32-cf79d6b423e9"
  ,
 "lastSeen" : ISODate("2018-01-19T18:49:52.242+05:30"),
 "firstSeen" : ISODate("2018-01-19T10:08:21.026+05:30"),
 "totalHourSpent" : NumberLong("31291216")
,

  "_id" : 
       "orgId" : "af39bc69-1938-4149-b9f7-f101fd9baf73",
       "userId" : "679416b0-3f88-11e7-8d27-77235eb1ba9b"
   ,
   "lastSeen" : ISODate("2018-01-19T20:51:30.946+05:30"),
   "firstSeen" : ISODate("2018-01-19T11:07:44.256+05:30"),
   "totalHourSpent" : NumberLong("35026690")
 ,

如何以小时为单位计算 totalHourSpent。提前致谢。

【问题讨论】:

参考here查看所有日期函数。 Rounding to 2 decimal places using MongoDB aggregation framework的可能重复 【参考方案1】:

$subtract 为您提供以毫秒为单位的持续时间。所以我们需要将持续时间除以 3600000 为小时格式。

返回的 Mills 可以通过除以 3600000(1 小时的毫秒数)转换为小时:

totalHourSpent:$divide : [$subtract: ["$lastSeen","$firstSeen"], 3600000]

35026690÷3600000=9.72963611111111 hours

【讨论】:

如何获取两位小数后的值。谢谢! 如果您关心精度,您可能需要使用扩展的 bson 类型,例如 $numberDecimal 我想要 9.729 小时 从 Mongdb 4.2 起可以使用 $trunc 操作符,语法 $trunc : [ , ] 与聚合,见链接***.com/questions/47038444/…

以上是关于如何在mongodb中减去两个日期时间的主要内容,如果未能解决你的问题,请参考以下文章

如何在sql中减去两个日期列和两个时间列

如何减去两个angularjs日期变量

转换以字符串格式存储的日期值并减去 mongodb 中的当前日期

如何在unix bash shell中减去或添加两个特定的日期和时间[复制]

如何从另一个日期中减去一个日期? [复制]

在Perl中减去两个日期字符串,转换为unix时间并还原