【问题标题】:Use a custom ID type in mongodb usyng python使用 python 在 mongodb 中使用自定义 ID 类型
【发布时间】:2013-06-21 03:03:28
【问题描述】:

我在 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"} 的文档。

对可能发生的事情有任何想法吗? here

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

【问题讨论】:

    标签: python mongodb mongoengine


    【解决方案1】:

    我找到了:

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

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

    它开始在两个操作中工作,读取和写入。

    这里是官方文档:Mongoengine

    【讨论】:

      【解决方案2】:

      不要将字典用于_id 字段,使用该字典的哈希。

      例如。字典的 json 表示形式的 sha1 ,或者如果记录数量不多,则只是 hash。

      【讨论】:

      • 对不起,我不是唯一一个与这些数据交互的人,所以 ID 已经给出,我主要对其进行读取操作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      • 1970-01-01
      • 2021-09-08
      • 2015-03-14
      • 1970-01-01
      • 2017-08-08
      相关资源
      最近更新 更多