没有时间戳的MongoDB日期范围搜索

时间:2018-07-11 04:27:47

标签: mongodb

我的mongodb集合中有以下记录:

{
    "_id" : ObjectId("5a7641b0d4b6828ad37c9a66"),
    "factor" : 1,
    "postdate" : ISODate("2018-01-31T05:00:00.000Z"),
}

我想进行搜索时不考虑时间戳,只考虑年,月,日。我该怎么办?

以下内容不起作用,因为该记录具有一个时间戳记,使其无法显示在我的搜索中:

db.transtest.find({postdate: { $gte : new Date("2018-01-01"), $lte : new Date("2018-01-31")}})

2 个答案:

答案 0 :(得分:1)

要包括该月的最后一天,请使用$lt和下个月的第一天:

db.transtest.find({postdate: { $gte: new Date("2018-01-01"), $lt: new Date("2018-02-01")}})

答案 1 :(得分:0)

只需将最大日期时间添加到$ lt日期标准中:

db.transtest.find({postdate: { $gte : new Date("2018-01-01"), $lte : new Date("2018-01-31T23:59:59.999Z")}})

您肯定会获得所有结果,因为ISOdate的精度是毫秒

  

BSON日期是一个64位整数,代表自Unix时代(1970年1月1日)以来的毫秒数。

此外,自记录起,它会自动处理时区

{ 
   "_id" : ObjectId("5b459ef6744c541aa898cdd4"), 
    "factor" : 1, 
    "postdate" : ISODate("2018-02-01T00:10:00.000+0100")  // <== Note the date with +1 hour TZ, same as  ISODate("2018-01-31T23:10:00.000Z")
}

也将返回。