我正在尝试使用 MongoDB 的 strict JSON representation of BSON 编写日期比较查询。 。
我希望它在 MongoDB shell (v2.4.3) 中工作
这是我尝试过的...
at
日期为 2020 年 1 月 1 日的新文档> db.myTimes.insert({"at": new Date("2020-01-01")})
> db.myTimes.find({"at": {"$gt": new Date("2010-01-01")}})
{ "_id" : ObjectId([snipped]), "at" : ISODate("2020-01-01T00:00:00Z") }
> db.myTimes.find({"at": {"$gt": {"$date":"2010-01-01T00:00:00Z"}}})
> db.myTimes.find({"at": {"$gt": {"$date":"2010-01-01"}}})
> db.myTimes.find({"at": {"$gt": {"$date": 1262304000000}}})
> db.myTimes.find({"at": {"$lte": {"$date": 1262304000000}}})
(如您所见,我尝试了 ISO8601 日期、纪元时间,并将我的 $gt
更改为 $lte
,因为理论上这些是互斥的,所以其中一个应该返回一些东西:-)
感谢您的指点!
-B
最佳答案
我不确定,但一切都表明使用严格的 JSON 构建有效查询是不可能的。虽然您可以运行将 $date
与 $gt
、$gte
、$lt
、$ 结合起来的查询lte
似乎,就像你的情况一样,总是被评估为 false
。
当您将 $date
与 $ne
或 $nin
结合使用时,它将匹配集合中的每个文档,因此我认为它证实了先前的观察。
当您尝试像这样获得完全匹配时,更重要的是 db.foo.find({at: {"$date":"2010-01-01T00:00:00Z"}})
你会得到无效的操作错误(10068)。
我的猜测是当尝试使用 $date
doc = {at: {"$date":"2010-01-01T00:00:00Z"}}
它不被评估为日期,也没有办法将这样的文档插入到集合中。
如您所见,似乎只有 mongoimport
之类的工具才能正确解析严格的 JSON。
这里有类似的问题:Is there a way to run MongoDB shell (or tojson method) in strict JSON mode? .
https://stackoverflow.com/questions/18370206/
相关文章:
mongodb - 如何在 $lookup Mongodb 的 LocalField 中将字符串转换
mongodb - Mongod 服务启动退出,代码为 100
javascript - 使用 Nodejs 在 mongodb 中存储文件
mongodb - 如何在复杂的 Collection-Object 中附加新文档
mongodb - 如何从 Mongoose 中的对象 ID 获取创建日期?
java - Spring数据mongo在Query中使用OR
spring - 使用 Spring 数据 MongoDB @Document 创建一个上限集合