Neil
Neil

Reputation: 1863

Find data for specific date in mongodb

I wanted to find data for 2014-08-01 from MongoDB collection. Date in MongoDB is in ISO format.I wrote below query, but it gives me very huge number which i suspect is not the data for 1 day. Can some one let me know what is wrong with query. sd is the key

db.history.count({sd:{$gte: new Date("2014-08-01")},sd:{$lt:new Date("2014-08-01")}})

Upvotes: 4

Views: 14493

Answers (2)

Afeesudheen
Afeesudheen

Reputation: 1024

await model.find(
  {
    $or:
   [
     {
       createdDate:
      { $gte: new Date(startDate), $lte: new Date(endDate) },
     },
     {
       createdDate:
      { $gte: new Date(startDate), $lte: new Date(endDate).setDate(new Date(endDate).getDate() + 1) },
     },
   ],
  },
)

Please assign value to startDate and endDate. The above example will help to find different data from different date as well as the same date for example if your trying to fetch data from '2020-06-22' to '2020-07-02' you will get data from this date range, other your are trying to fetch data on the same date this code will work that mechanism also

Thank you

Upvotes: 0

Neil Lunn
Neil Lunn

Reputation: 151220

Ranges can be specified using $gte and $lt in the same document portion:

db.history.count({ "sd": {
    "$gte": new Date("2014-08-01"), "$lt": new Date("2014-08-02")
}})

Otherwise the argument are considered to be separate and a logical "and" condition. But really since you are using the same "key" in your "sd" field, this is not allowed in a JSON/BSON document and violates the "unique" keys rule for hash structures in general. So one condition overwrites the other and only one is applied.

That is why your result is wrong. Use as shown above instead.

Upvotes: 10

Related Questions