2015-05-25 4 views
1

Я переношу приложение из ndb App Engine в mongoengine. ndb предоставляет метод Model.get_by_id, и я хотел бы реализовать это в терминах mongoengine. Итак, как вы получаете документ по его автоматически сгенерированному идентификатору или по любому полю имеет primary_key значение True?Как получить документ по его первичному ключу в mongoengine?

+1

Почему вы не проверяете реализацию get_by_id? –

+0

@KarolyHorvath App Engine ndb's get_by_id использует хранилище данных Google, тогда как я использую MongoDB, поэтому внутренности не совпадают. – bigblind

ответ

2

Заканчивать http://docs.mongoengine.org/guide/querying.html

Ответ прост:

Model.objects(id='your-id') 

Я предполагаю, что вы знаете имя поля первичного ключа.

+0

Я предпочитаю это over with_id, поскольку он вызывает исключение DoNotExist, когда id не существует, где с id возвращает объект None. –

1

Вы можете использовать with_id(). Таким образом,

class MyDocument(Document): 
    ... 
    @classmethod 
    def get_by_id(cls, id): 
     return cls.objects.with_id(id) 
0

Использование with_id. Он специализирован для этой цели.

Model.objects.with_id('your-id') 

Он возвращает None, если объект не найден.

Но убедитесь, что вы не устанавливаете фильтр (как если бы он был filter method), потому что он поднимает InvalidQueryError.

Смежные вопросы