首页 > 解决方案 > mongodb按查询范围过滤的问题

问题描述

我在使用 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 } } });

非常感谢。

标签: javamongodbspring-datarange

解决方案


您可能必须检查此类相关主题以了解为什么您实际上不能直接在查询中使用纪元时间。

这是查询 Date 的有趣部分:

根据mongo Shell 中的数据类型,两者都应该是等价的:

mongo db 提供了各种方法来返回日期,无论是作为字符串还是作为 Date 对象:

  • Date() 方法,将当前日期作为字符串返回。
  • new Date() 构造函数,它使用 ISODate() 包装器返回 Date 对象。
  • ISODate() 构造函数,它使用 ISODate() 包装器返回 Date 对象。

并且 usingISODate 仍然应该返回一个 Date 对象

{"$date": "ISO-8601 string"}当需要严格的 JSON 表示时可以使用。

因此,您可能需要检查所有 ISO-8601 可用格式,并根据预期格式更新您的代码,以使其按预期工作。


推荐阅读