【问题标题】:Pymongo invalid syntax near $gte$gte 附近的 Pymongo 语法无效
【发布时间】:2018-12-11 17:34:00
【问题描述】:

我正在使用 Pymongo。我已成功连接到我的 MongoDB。集合名称是test_collection。在文档中,有一个名为 request_time 的键。我正在尝试获取request_time 特定范围内的文档。

在 mongodb shell 中,此命令有效,

db.getCollection('test_collection').find({ request_time: { $gte: new Date('2018-06-22'), $lt: new Date('2018-06-26') }});

但是,当我使用 pymongo.它不接受$ 并给出语法错误。

collection = db['test_collection']

cursor = collection.find({request_time: { $gte: new Date('2018-06-22'), $lt: new Date('2018-06-26') }})

【问题讨论】:

    标签: python mongodb pymongo


    【解决方案1】:

    尝试在每种情况下都放上括号

    ({ { $gte: new Date('2018-06-22') }, { $lt: new Date('2018-06-26') } })

    【讨论】:

    • 仅用于完整性检查...将引号替换为双引号
    • 或尝试在 $gt 和 $lt 处加上双引号
    【解决方案2】:

    您在 mongo shell 中用 Javascript 编写命令,不要将它们复制粘贴到 python 中。 Python 不是 Javascript。

    Python 既没有 new 也没有内置的 Date 类型。

    pymongo.collection.Collection 类的find 方法需要带有字符串键的字典,请将键放在引号中。

    如果来自 mongo 集合的文档中的各个字段是 ISODates,则使用 datetime.datetime

    import datetime 
    cursor = collection.find({"request_time": { 
                              "$gte": datetime.datetime(2018, 6, 22), 
                              "$lt": datetime.datetime(2018, 6, 26) }
                             })
    

    【讨论】:

      【解决方案3】:

      在代码中使用 '$gt''$lt'

      cursor = collection.find({request_time: { '$gte': new Date('2018-06-22'), '$lt': new Date('2018-06-26') }})
      

      【讨论】:

      • 现在显示 request_time 未定义。 request_time 键存在于文档本身中。我需要以某种方式定义它吗?
      • Pymongo 接收所有函数和字段作为字符串。所以最终的查询是 cursor = collection.find({'request_time': { '$gte': new Date('2018-06-22'), '$lt': new Date('2018-06-26' ) }})
      • python既没有new也没有内置Date类型
      猜你喜欢
      • 2018-08-18
      • 1970-01-01
      • 1970-01-01
      • 2012-12-22
      • 2016-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      相关资源
      最近更新 更多