我在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 } } });
非常感谢。
答案 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