Как правильно запросить у MongoDB _id с использованием строки с помощью Python? - PullRequest
25 голосов
/ 21 октября 2011

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

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

Но это не работает.Что я делаю не так?

Ответы [ 5 ]

45 голосов
/ 21 октября 2011

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

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

РЕДАКТИРОВАТЬ: текущий импорт: from bson.objectid import ObjectId

29 голосов
/ 26 июня 2013

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.

2 голосов
/ 06 июля 2017

Для печати:

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

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

0 голосов
/ 03 июня 2014

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

0 голосов
/ 21 октября 2011

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

...