【问题标题】:What is the correct way to query MongoDB for _id using string by using Python?使用 Python 使用字符串查询 MongoDB 的 _id 的正确方法是什么?
【发布时间】:2011-12-12 08:36:53
【问题描述】:

我正在使用 pymongo 驱动程序。假设可以使用字符串查询文档的_id字段,如下所示:

thing = db.things.find_one({'_id':'4ea113d6b684853c8e000001'})

但它不起作用。我做错了什么?

【问题讨论】:

    标签: mongodb pymongo


    【解决方案1】:

    要打印它:

    import pymongo
    from bson.objectid import ObjectId    
    print(db.things.find_one({'_id': ObjectId('4ea113d6b684853c8e000001')}))
    

    如果您不想打印,请存储在其他变量中

    【讨论】:

      【解决方案2】:

      PyMongo 改变了它的结构。 ObjectID 不再从 pymongo 导入,而是从 bson 导入。现在应该是:

      from bson.objectid import ObjectId
      thing = db.things.find_one({'_id': ObjectId('4ea113d6b684853c8e000001')})
      

      提醒一下,根据pypi/pymongo,不要安装“bson”包。 PyMongo 自带 bson 包;执行“pip install bson”会安装与 PyMongo 不兼容的第三方包。

      【解决方案3】:

      PyMongo 文档似乎与当前版本不同步。 ObjectIds 现在位于 bson.objectid 命名空间下。如果我没记错的话,他们从 2.3 版开始就是这样。 使用 from bson.objectid import ObjectId。

      【讨论】:

        【解决方案4】:

        应该是:

        from pymongo.objectid import ObjectId   
        thing = db.things.find_one({'_id': ObjectId('4ea113d6b684853c8e000001') })
        

        编辑: 目前的进口是: from bson.objectid import ObjectId

        【讨论】:

        【解决方案5】:

        thing = db.things.find_one({'_id':ObjectId('4ea113d6b684853c8e000001')}) 应该可以工作

        【讨论】:

        • 感谢 lobster1234 你的回答也是正确的,但这是我缺少的导入,干杯
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-04
        • 2015-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多