【问题标题】:Pymongo - epoch date filter query not working on collectionPymongo - 纪元日期过滤器查询不适用于集合
【发布时间】:2021-06-12 02:09:33
【问题描述】:

我有一个 Mongodb 集合,需要按文档中的日期字段进行过滤。日期以 unix 纪元格式存储。

myquery = {"created_at": {"$gt": 1623384000}}
docs = mycollection.find(myquery)

这应该返回 200k 文档,但它返回超过 1M 文档。

但是,当我从 MongoDB Compass 运行过滤器时,我得到了正确的结果。

【问题讨论】:

  • 有哪些您没想到会返回的文档示例?
  • 很奇怪。返回文件上的所有日期都小于 1623384000。
  • 我还是想看看文件在 mongo 中的样子。 db.mycollection.aggregate([{$sample: { size: 5 } }, {$project:{_id:0, created_at:1}}]) 应该足够了。

标签: mongodb date filter pymongo


【解决方案1】:

我认为 pymongo 不支持使用 Unix Epoch 查询 ISODate 键。

查询前必须手动转换成pythonsdatetime格式。

from datetime import datetime

myquery = {"created_at": {"$gt": datetime.utcfromtimestamp(1623384000)}}
docs = mycollection.find(myquery)

【讨论】:

  • 将纪元转换为 python 的日期时间返回 0 个文档。还更新了帖子以显示过滤器在 MongoDB 指南针中正常工作。
  • 这很奇怪,datetime.utcfromtimestamp(1623384000) 在我的本地返回 datetime.datetime(2021, 6, 11, 4, 0),我提供的示例也可以正常工作。你能再检查一下吗?另外,我的意思是 pymongo 不支持 epoch 而不是 mongoDB 。道歉。
猜你喜欢
  • 2019-11-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-26
  • 2016-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多