【问题标题】:mongoengine- what do referencefield storemongoengine-referencefield 存储什么
【发布时间】:2020-01-14 22:40:55
【问题描述】:

在 mongoengine 中,必须在 ReferenceField 中设置什么值。我的意思是我们是否应该在要参考的文档的“ObjectId”中提供。 例如,

class Bar(Document):
    content = StringField()
    foo = ReferenceField('Foo')

类 Bar 的对象应该在 "foo" 属性中设置什么值。它应该是“Foo”集合中某个文档的 ObjectId 吗? 我还可以将任何其他唯一字段设置为参考字段中的值,提及它是哪个字段?

【问题讨论】:

    标签: mongodb orm mongoengine


    【解决方案1】:

    在 MongoEngine 0.8 版本之前,它默认存储一个 DBRef。对于 0.8 及更高版本,它默认存储一个 ObjectId。

    在创建 ReferenceField (explicit is better than implicit) 时应使用 dbref 参数:

    class Bar(Document):
        content = StringField()
        foo = ReferenceField('Foo', dbref = True)   # will use a DBRef
        bar = ReferenceField('Bar', dbref = False)  # will use an ObjectId
    

    这是documentation for the ReferenceField

    我安装了 0.7.9 版,当我创建一个 没有 dbref 参数的 ReferenceField 时,我收到以下警告:

    [...]/lib/python2.7/site-packages/mongoengine/fields.py:744: FutureWarning:
    ReferenceFields will default to using ObjectId  strings in 0.8, set DBRef=True
    if this isn't desired
    warnings.warn(msg, FutureWarning)
    

    【讨论】:

      【解决方案2】:

      它存储了一个 DBRef,你只需要传递一个 Foo 实例,它就会自动转换。请参阅文档中的部分:https://mongoengine-odm.readthedocs.io/guide/defining-documents.html?highlight=referencefield

      【讨论】:

      • 谢谢伙计,我猜他们已经更新了 0.6.20 版的文档。我用的是 0.6.18,不过我会更新到 0.6.20 非常感谢朋友的帮助。
      • 链接已失效,404
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-01
      • 2012-02-29
      • 1970-01-01
      • 2014-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多