使用Python使用字符串查询MongoDB for _id的正确方法是什么?

时间:2011-10-21 07:00:04

标签: mongodb pymongo

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

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

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

5 个答案:

答案 0 :(得分:44)

应该是:

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

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

答案 1 :(得分:27)

PyMongo改变了它的结构。不再从ObjectID导入pymongo,而是从bson导入from bson.objectid import ObjectId thing = db.things.find_one({'_id': ObjectId('4ea113d6b684853c8e000001')}) 。现在应该是:

{{1}}

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

答案 2 :(得分:1)

要打印它:

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

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

答案 3 :(得分:0)

thing = db.things.find_one({'_id':ObjectId('4ea113d6b684853c8e000001')})应该有效

答案 4 :(得分:0)

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