Как найти разницу в часах между двумя датами в mongodb - PullRequest
1 голос
/ 12 мая 2019

У меня есть документы в следующей структуре, сохраненные в моем 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"
}

можно ли запрашивать документы, где промежуток времени междуloginTime и logoutTime. например: больше 20 часов

mongodb version = 3.4

1 Ответ

1 голос
/ 12 мая 2019

Вы можете использовать ниже агрегации

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

Вам нужно просто $subtract loginTime от logoutTime, и это даст вам вычтенноеотметка времени, а затем просто $divide с помощью 3600000, чтобы получить время в часах.

MongoPlayground

...