使用int作为_id检索mongodb文档

时间:2015-07-13 03:53:26

标签: django mongodb mongoengine objectid

我将一些维基百科文档导入mongodb,使用int类型" _id"字段(它们是维基百科页面的pageid):

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

我和Django一起使用Mongoengine,我无法收到我导入的文件。当我使用以下代码时:

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

报告此错误:

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

当我使用bson.objectid.ObjectId类时:

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

报告以下错误:

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

有什么方法可以解决这个问题吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

使用MongoEngine,您可以在文档中将字段定义为&#34;主键&#34; (&#34; _id&#34;使用keyword arguments中的primary_key字段填写字段:

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

但当然你需要确保&#34;键入&#34;在你的收藏中的任何地方使用,否则类型检查将失败任何&#34; _id&#34;这不是int()