Получить документы mongodb с int как _id

Я импортировал некоторые документы википедии в mongodb с полем типа int «_id» (это идентификаторы страниц для страницы википедии):

> db.wiki_page_id.find()
{ "_id" : 10, "page_title" : "AccessibleComputing" }
{ "_id" : 12, "page_title" : "Anarchism" }

Я использую движок Mongo вместе с Django, и у меня возникают проблемы с получением импортированных документов. Когда я использую следующий код:

page_id_doc = WikiPageId.objects(id=10)[0]

он сообщает об этой ошибке:

u'10' не является допустимым ObjectId, это должен быть 12-байтовый ввод типа "str" ​​или 24-символьная шестнадцатеричная строка.

Когда я использую класс bson.objectid.ObjectId следующим образом:

page_id_doc = WikiPageId.objects(id=ObjectId(10))[0]

Он сообщает о следующей ошибке:

id должен быть экземпляром (str, unicode, ObjectId), а не

Есть ли способ обойти это?

Спасибо!


person moonkey    schedule 13.07.2015    source источник


Ответы (1)


С помощью MongoEngine вы можете определить поле в документе как «первичный ключ» (поле «_id», используя primary_key в теге аргументы ключевого слова в поле:

class MyClass(Document):
    id = IntField(primary_key=True)

Но, конечно, вам нужно убедиться, что «тип» используется везде в вашей коллекции, иначе проверка типа не будет выполнена для любого «_id», который не является int().

person Blakes Seven    schedule 13.07.2015