Search code examples
mongodbmongo-shellisodate

compare date in mongodb


so i have this document in my collection

db.person.insertOne( { name: "vincent", age: 40, alarm: {morning:new Date("2018-11-14T10:00:00Z") , night: new Date("2018-11-14T23:00:00Z")}})

and i need to check if there is an alarm (morning alarm or night alarm) in the next hour

here is what i ve tried

db.person.find( { "alarm.morning": { $lte: new Date(ISODate().getTime() + 1000 * 60 * 60) , $gte: new Date(ISODate().getTime() - 1000 * 60 * 60)} })

any help, please?


Solution

  • Use moment library for the simple calculation

    const moment = require('moment')
    
    const startDate = moment().toDate()
    const endDate = moment().add(1, 'hours').toDate()
    
    db.person.find({ 
      "$or": [
        { "alarm.morning": { "$lte": endDate , "$gte": startDate }},
        { "alarm.night": { "$lte": endDate , "$gte": startDate }}
      ]
    })
    

    In mongoshell

    var startDate = new Date().toISOString()
    
    var today = new Date()
    today.setHours(today.getHours() + 1)
    var endDate = today.toISOString()
    
    db.person.find({ 
      "$or": [
        { "alarm.morning": { "$lte": endDate , "$gte": startDate }},
        { "alarm.night": { "$lte": endDate , "$gte": startDate }}
      ]
    })