【问题标题】:Mongo DB aggregation date filter not workingMongodb聚合日期过滤器不起作用
【发布时间】:2021-01-08 10:00:09
【问题描述】:

我正在尝试通过 pymongo 过滤 MongoDB 上的日期。专门寻找“匹配”大于给定日期的所有日期。我的查询绝对正确,因为它在 MongoDB 指南针 - 聚合中完美查询。但是,一旦我将它添加到我的 pymongo 代码中,它就会返回零结果。所以如上所述它不起作用,所以我已经通过指南针应用程序确认我的查询字符串实际上是正确的,请协助,我下面的代码是我用来在指南针中查询的有效的,下面是我的完整聚合管道在 pymongo - 这不起作用。 (顺便说一句:我的日期格式正确存储在 mongo - 作为“日期”)

{
// MongoDB compass code - works fine.

"date": {"$gt": new Date("2020-12-06T00:00:00.000+00:00")}

}

//Pymongo code

betdate = weekcol.aggregate([
    ## stage 1
    {"$match":{
  
"date": {"$gt": new Date("2020-12-06T00:00:00.000+00:00")}

    }        }
        
])

for bdate in betdate:
    print(bdate)

上面的 pymongo 代码,给我抛出了错误:

文件“”,第 9 行 “日期”:{“$gt”:新日期(“2020-12-06T00:00:00.000+00:00”)} SyntaxError: 无效语法

我感觉是新的 date() 有问题,但我将它更改为 ISODate(),它仍然不起作用。

【问题讨论】:

  • 试试ISODate("2020-12-06T00:00:00Z")
  • @Yahya ,我试过了.....我接受了你的建议,并添加了带有“z”和结尾的日期,但它仍然不起作用
  • new Date() 是 Javascript 代码,但您使用的是 python。我认为你必须使用 python datetime 对象。 ISODate 只是 mongo shell 中 new Date() 的别名,您也不​​使用它。

标签: python mongodb pymongo etl data-analysis


【解决方案1】:

pymongo 中的等价物是:

import datetime
import pytz

filter1 = {"date": {"$gt": datetime.datetime(2020, 12, 6, 0, 0, tzinfo=pytz.utc)}}

【讨论】:

  • @Belly Buster,非常感谢它现在可以使用。它以逗号分隔的 Y-M-D 返回日期.....但是我应该能够按照自己的方式工作并将其编译回日期字符串。再次感谢您的回复和帮助
  • 它返回一个日期时间对象,您可以使用strftime() 轻松地将其转换为几乎任何格式的字符串。见docs.python.org/3/library/…
猜你喜欢
  • 2020-10-27
  • 2015-12-30
  • 1970-01-01
  • 2019-09-23
  • 2015-01-01
  • 1970-01-01
  • 2020-03-08
  • 1970-01-01
  • 2013-11-08
相关资源
最近更新 更多