3

我在 Django 1.5 应用程序中使用 mongodb 作为我的一些信息的存储后端。

存储在 mongodb 集合中的每个文档都有一个 _id 字段,它是一个由多个字符串组成的字典。现在,当我尝试检索此信息时,我使用 mongoengine 将文档映射到模型类:

from mongoengine import *

class MyClass(Document):
    _id = DictField()

在我看来:

documents = MyClass.objects
print documents

当我调用视图时,我得到一个TypeError

TypeError at /viewname/
id must be an instance of (str, unicode, ObjectId), not <type 'dict'>

更糟糕的是,当我使用保存规则时

obj = MyClass({"tag":"sometag"})
obj.save()

我得到了同样的错误,但是在 db 集合_id={"tag":"sometag"}中创建了文档。

关于可能发生什么的任何想法?这可能和这里发生的一样

注意:我尝试使用 EmbeddedDocumentField,但结果是相同的(错误采用我的 Embedded 类名而不是 'dict')

4

2 回答 2

6

我找到了:

我错过了primary_key论点。如果我在模型上更改它:

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

它开始在读取和写入这两种操作中工作。

这是官方文档:Mongoengine

于 2013-06-20T19:03:28.087 回答
1

不要使用 dict 作为_id字段,使用该字典的哈希。

例如。字典的 json 表示形式的 sha1 ,或者只是hash在记录数量没有那么多的情况下。

于 2013-06-20T18:36:46.927 回答