如何在mongodb中找到两个日期之间的时差

时间:2019-05-12 17:33:29

标签: mongodb mongodb-query aggregation-framework

我将以下结构的文档保存在mongodb中。

  

UserLogs

{
"_id":"111",
"studentID" : "1",
"loginTime" : "2019-05-01 09:40:00",
"logoutTime" : "2019-05-01 19:40:00"
},
{
"_id":"222",
"studentID" : "1",
"loginTime" : "2019-05-02 09:40:00",
"logoutTime" : "2019-05-02 20:40:00"
},
{
"_id":"333",
"studentID" : "2",
"loginTime" : "2019-05-02 09:40:00",
"logoutTime" : "2019-05-02 20:40:00"
}

是否可以查询登录时间和注销时间之间的时间段的文档。例如:磨碎时间超过20小时

mongodb version = 3.4

1 个答案:

答案 0 :(得分:1)

您可以使用以下汇总

db.collection.aggregate([
  { "$project": {
    "difference": {
      "$divide": [
        { "$subtract": ["$logoutTime", "$loginTime"] },
        60 * 1000 * 60
      ]
    }
  }},
  { "$group": {
    "_id": "$studentID",
    "totalDifference": { "$sum": "$difference" }
  }},
  { "$match": { "totalDifference": { "$gte": 20 }}}
])

您只需从loginTime$subtract logoutTime开始,它将为您提供减去的时间戳,然后与3600000 $divide一起获得时间在几个小时内。

MongoPlayground