gpt4 book ai didi

mongodb - 基于日期范围查找文档在 mongodb shell 中有效,但在 pymongo 中无效

转载 作者:可可西里 更新时间:2023-11-01 10:30:27 24 4
gpt4 key购买 nike

在 mongo shell 上,这会返回一个很好的文档:

> db.orderbook_log.findOne({'time': { '$gte': new Date(2014, 9, 24, 17, 38, 20, 546000), '$lt': new Date(2014, 10, 24, 17, 39, 20, 546000)}})

//... returns document with this time stamp:
"time" : ISODate("2014-10-25T00:47:30.819Z")

请注意,我使用“9”表示十月,因为 JavaScript 的月份是 0-11。我还用“23”作为日期进行了测试,因为它看起来 JS 日期也是 0 索引的,并且还返回了一个文档:“time”:ISODate(“2014-10-24T17:32:13.595Z ")

atime = datetime.datetime(2014, 10, 24, 17, 38, 20, 546000)
btime = datetime.datetime(2014, 10, 24, 17, 39, 20, 546000)

future_book = log.find_one({"time": {"$gte": atime, "$lt": btime}})

但是当我在pymongo中执行find_one时future_bookNone

我真正想做的是遍历前 100 条左右的记录,并获取相对一分钟后发生的记录。

最佳答案

Javascript 时代不是零索引的,唉。只有几个月。

我在您的 Javascript 中看到您向第一个日期添加了 546,000 毫秒,因此结果是 2014 年 10 月 24 日 17:48:26。 Javascript 然后转换为您本地的时区,所以在我的例子中它增加了 5 个小时:

> new Date(2014, 10, 24, 17, 39, 20, 546000)
ISODate("2014-11-24T22:48:26Z")

然后将其与文档中的“时间”字段进行比较(忽略时区)。

最好删除最后的毫秒参数,并使用 MongoDB shell 的 ISODate 函数,该函数的设计比 Javascript 日期更合理:

> ISODate('2014-10-24T17:38:20')
ISODate("2014-10-24T17:38:20Z")

然后它将以您期望的方式与您的文档进行比较,并且它应该与 PyMongo 行为相匹配。我建议您也从 Python 日期时间构造函数中删除毫秒参数,以澄清问题。

关于mongodb - 基于日期范围查找文档在 mongodb shell 中有效,但在 pymongo 中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26576515/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com