mongodb - 可以在 MongoDB 查询中使用严格的 JSON $dates 吗?

我正在尝试使用 MongoDB 的 strict JSON representation of BSON 编写日期比较查询。

我希望它在 MongoDB shell (v2.4.3) 中工作

这是我尝试过的...

设置:创建一个 at 日期为 2020 年 1 月 1 日的新文档

> db.myTimes.insert({"at": new Date("2020-01-01")})

对日期> 2010使用非严格查询,没问题:

> db.myTimes.find({"at": {"$gt": new Date("2010-01-01")}})
{ "_id" : ObjectId([snipped]), "at" : ISODate("2020-01-01T00:00:00Z") }

使用严格的 JSON 查询,但是...... 没有骰子

> 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

在 Mongo shell 中创建文档时
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 获取创建日期?

regex - Mongo 正则表达式搜索的索引范围

java - Spring数据mongo在Query中使用OR

spring - 使用 Spring 数据 MongoDB @Document 创建一个上限集合

mongodb - 为什么直接搜索 MongoDB 分片的全文搜索比通过集群管理器 (mongos)

php - 如何单击表条目并在另一个 mongodb 集合(php/jquery)中搜索它