34

I'm trying to find out how to do an specific query with mongoose. I have in mongodb something like this:

{ "_id" : 1, "modificationDate" : ISODate("2013-06-26T18:57:30.012Z") }
{ "_id" : 2, "modificationDate" : ISODate("2013-06-26T18:57:35.012Z") }

I want to obtain all the objects where the difference between the actual date and modificationDate is greater than 5 days.

dysphoria
  • 353
  • 1
  • 3
  • 8

2 Answers2

66

Calculate the 5-days-old cutoff time and then perform a find using the $lt operator and the calculated cutoff:

var cutoff = new Date();
cutoff.setDate(cutoff.getDate()-5);
MyModel.find({modificationDate: {$lt: cutoff}}, function (err, docs) { ... });
JohnnyHK
  • 305,182
  • 66
  • 621
  • 471
  • 3
    other compare operators: see: http://docs.mongodb.org/manual/reference/operator/query-comparison/ – Reinhard Jan 24 '15 at 11:45
10

If you need to query between two dates you can query with $gte = greater than equals and $lte = lesser than equals in date format "YYYY-MM-DD"

const results = await MyModel.find(
  {
    date: {
      $gte: "2021-01-20",
      $lte: "2021-02-15",
    }
  }
)

This example will query MyModel between January 20th 2021 to February 15th 2021.

Reference: https://mongoosejs.com/docs/tutorials/dates.html

Emisael Carrera
  • 617
  • 1
  • 7
  • 10