Подтвердить что ты не робот

Каков правильный способ запроса MongoDB для _id с использованием строки с помощью Python?

Я использую драйвер pymongo. Предположительно, можно использовать строку для запроса поля _id документа, например:

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

Но это не сработает. Что я делаю неправильно?

4b9b3361

Ответ 1

Это должно быть:

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

EDIT: Текущий импорт: from bson.objectid import ObjectId

Ответ 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

Для печати:

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

если вы не хотите печатать, хранить в другой переменной

Ответ 4

thing = db.things.find_one({'_id':ObjectId('4ea113d6b684853c8e000001')}) должен работать

Ответ 5

Документация PyMongo, похоже, не синхронизирована с текущей версией. ObjectIds теперь находятся в пространстве имен bson.objectid. Если я правильно помню, это было так, начиная с версии 2.3. Используйте из bson.objectid import ObjectId.