Flask 如何使用数据库中已有的引用文档创建MongoEngine文档?

Flask 如何使用数据库中已有的引用文档创建MongoEngine文档?,flask,mongoengine,flask-mongoengine,Flask,Mongoengine,Flask Mongoengine,我的(Flask MongoEngine)数据库中已经存储了一类文档,我已经有了它们的唯一id。我的实际示例更复杂,但假设它看起来像这样: class Stuff(Document): stuffstuff = StringField() 我想从我数据库中已有的Stuff中收集Stuff实例。假设我想从数据库中当前的Stuff实例创建下面类的新实例 class StuffsCollection(Document): lotsofstuffs = ListField(Refere

我的(Flask MongoEngine)数据库中已经存储了一类文档,我已经有了它们的唯一id。我的实际示例更复杂,但假设它看起来像这样:

class Stuff(Document):
    stuffstuff = StringField()
我想从我数据库中已有的Stuff中收集Stuff实例。假设我想从数据库中当前的Stuff实例创建下面类的新实例

class StuffsCollection(Document):
    lotsofstuffs = ListField(ReferenceField(Stuff))
在文档中,创建Stuff集合实例的唯一方法似乎是首先创建Stuff实例,然后将它们作为关键字参数传入。例如:

a_thing = Stuff(stuffstuff="here's a thing")
a_thing.save()
some_things = StuffsCollection(lotsofstuffs=[a_thing])
some_things.save()

既然我已经拥有引用我的Stuff实例的唯一ID,我可以告诉MongoEngine在新Stuff集合中使用这些现有Stuff作为关键字参数吗?这似乎比查询每个文档的数据库,然后创建该文档的新实例更有效,然后将每个对象传递到我的新列表字段。

您需要传递
DBRef
对象:

from bson import DBRef, ObjectId

a_id = ObjectId('somevalidid')
a_ref = DBRef('stuff', a_id)

some_things = StuffsCollection(lotsofstuffs=[a_ref])
some_things.save()
MongoEngine使用
DBRef
ObjectID
存储
ReferenceField
。如果字段配置为
DBRef=False
,则
'stuff'
参数将被忽略。否则,这必须是
Stuff
对象的集合名称


但是,在这两种情况下都需要将
DBRef
对象传递给构造函数,因为在
ReferenceField
中实现验证的方式非常感谢!还有一件事:如何将现有文档(我已经知道其id,并且从基础文档继承,如上面的Stuff类)作为嵌入文档而不是引用文档传递到新的Stuff集合中?对于嵌入文档,您需要将整个文档及其所有数据传递到新容器,因此,没有办法首先从数据库中获取它。