7

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

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

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

4

2 回答 2

12

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

dbref创建 ReferenceField 时应该使用一个参数(显式优于隐式):

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

这是ReferenceField 的文档

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

[...]/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)
于 2013-04-04T08:47:11.093 回答
3

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

于 2012-08-08T19:28:25.803 回答