【问题标题】:how to query using isodate in pymongo如何在 pymongo 中使用 isodate 进行查询
【发布时间】:2022-03-29 19:09:02
【问题描述】:

我有一个在 mongo shell 中工作的 mongodb 查询:

db.collection.find({ created_at:  { $gte : ISODate("2015-03-01T00:00:00.000Z"), $lt : ISODate("2015-03-30T00:00:00.00Z") } })

我正在尝试以下 pymongo:

test_range = agents.coll.find({ "created_at" :  { "$gte" : "ISODate('2015-03-01T00:00:00.000Z')", "$lt" : "ISODate('2015-03-30T00:00:00.00Z')" } })

我收到SyntaxError: invalid syntax

在 pymongo 查询中处理 ISODate 的正确方法是什么?

【问题讨论】:

    标签: python pymongo


    【解决方案1】:

    日期在 MongoDB 中存储为 ISODates,但是,当您使用 Pymongo 时,日期会转换为 Python Datetime 对象。因此,使用 Pymongo,您的查询应如下所示:

    test_range = agents.coll.find({ "created_at": {"$gte" : datetime(2015, 3, 1), "$lt": datetime(2015, 3, 30)}})
    

    【讨论】:

    • 如何处理日期时间?
    • 我可以在管道中使用它来聚合吗?
    • @AuturBraga 你能在聚合中使用数据时间吗?是的。
    【解决方案2】:

    使用isoformat()。示例dt = datetime.datetime.now().isoformat()

    【讨论】:

    • .isoformat() 日期时间对象的日期并将其转换为 ISO 格式的字符串。通过 PyMongo 查询 ISODate 字段时这会起作用吗?
    【解决方案3】:

    下面的代码对我来说很好用

    db.yourcollection.find({"createdAt":{"$gte":dateutil.parser.parse(str(date_time_str)),"$lt":dateutil.parser.parse(str(currentdate))},\
    "status":"completed"},{"_id":0})
    

    对我来说,如果日期没有转换成 字符串,则会显示错误消息“解析器必须是字符串或字符流,而不是日期”

    【讨论】:

      猜你喜欢
      • 2021-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      • 2017-01-17
      • 2013-11-18
      相关资源
      最近更新 更多