mongodb按查询范围过滤的问题

时间:2019-03-13 10:33:22

标签: java mongodb spring-data range

我在mongodb上遇到问题。谁能解释我为什么这样做(返回一些结果):

db.getCollection('test').find({"reportedOn" : { "$gte" :    ISODate("2019-03-01T01:20:00"), "$lt" : ISODate("2019-04-01T02:00:00") } });

这不起作用(返回零):

db.getCollection('test').find({"reportedOn" : { "$gte" : { "$date" : 1551398400000 }, "$lt" : { "$date" : 1554073200000 } } });

非常感谢。

2 个答案:

答案 0 :(得分:1)

您可能必须检查这种related topic才能理解为什么实际上不能直接在查询中使用纪元时间。

这是查询Date的有趣部分:

根据Data Types in the mongo Shell,两者应等效:

  

mongo db提供了多种返回日期的方法,可以是字符串形式还是Date对象:

     
      
  • Date()方法,以字符串形式返回当前日期。
  •   
  • 新的Date()构造函数,该构造函数使用ISODate()包装器返回Date对象。
  •   
  • ISODate()构造函数,该构造函数使用ISODate()包装器返回Date对象。
  •   

并使用ISODate should still return a Date object

{"$date": "ISO-8601 string"}可用于需要严格的JSON表示形式的情况。

因此,您可能需要检查all ISO-8601 available formats并相应地将代码更新为预期的格式,以便按预期工作。

答案 1 :(得分:0)

尝试以下查询

{ "$date" : { "$numberLong" : "<dateAsMilliseconds>" } }
正如MongoDB文档中提到的

,而不是仅与$ date进行比较。 Link