Как найти по _id в мин?

У меня есть сопоставленный класс в мин

from ming import Session, create_datastore
from ming import schema
from ming.odm import ODMSession
from ming.odm.mapper import MapperExtension
from ming.odm.property import ForeignIdProperty
from ming.odm.property import FieldProperty, RelationProperty
from ming.odm.declarative import MappedClass
import config

bind = create_datastore(config.DATABASE_NAME)
session = Session(bind)
odm_session = ODMSession(doc_session=session)


class Document(MappedClass):

    class __mongometa__:
        session = odm_session
        name = 'document'

    _id = FieldProperty(schema.ObjectId)

Теперь я хочу сделать простой запрос к нему как

Document.query.get(_id="51e46f782b5f9411144f0efe")

Но это не работает. Документация не совсем ясно об этом. Я знаю, что в оболочке mongodb мы должны обернуть id в объект ObjectId, но я не могу заставить его работать в Python

1 ответ

Решение

Вы должны попробовать запрос с ObjectId

from bson.objectid import ObjectId
Document.query.get(_id=ObjectId('51e46f782b5f9411144f0efe'))

С голым пимонго

from bson.objectid import ObjectId
from pymongo import Connection
connection = Connection()
db = connection['lenin']
collection = db.document
collection.find_one({'_id': '51e35ee82e3817732b7bf3c1'}) # returns None
collection.find_one({'_id': ObjectId('51e35ee82e3817732b7bf3c1')}) # returns the object
Другие вопросы по тегам