2015-07-13 3 views
0

J'ai importé des documents wikipedia en MongoDB avec le type int champ "_id" (ils sont les pageids pour la page wikipedia):récupérer des documents MongoDB avec int comme _id

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

J'utilise Mongoengine avec Django, et J'ai de la difficulté à récupérer les documents que j'ai importés. Lorsque j'utilise le code suivant:

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

il signale cette erreur:

u'10' is not a valid ObjectId, it must be a 12-byte input of type 'str' or a 24-character hex string 

Lorsque j'utilise la classe bson.objectid.ObjectId comme ceci:

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

Il signale l'erreur suivante:

id must be an instance of (str, unicode, ObjectId), not <type 'int'> 

I Y at-il un moyen de contourner ce problème?

Merci!

Répondre

1

Avec MongoEngine, vous pouvez définir un champ dans votre document comme champ « clé primaire » (« _id » en utilisant primary_key dans le keyword arguments sur le terrain:

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

Mais bien sûr, vous avez besoin de faire Assurez-vous que "type" est utilisé partout dans votre collection sinon le contrôle de type échouera pour tout "_id" qui n'est pas int()

+0

Merci, ça fonctionne comme un charme! – moonkey