gpt4 book ai didi

flask - 如何使用数据库中已经存在的引用文档创建MongoEngine文档?

转载 作者:行者123 更新时间:2023-12-03 17:36:12 25 4
gpt4 key购买 nike

我的(Flask-MongoEngine)数据库中已经存储了一类文档,并且我已经有了它们的唯一ID。我的实际示例更为复杂,但可以说它看起来像这样:

class Stuff(Document):
stuffstuff = StringField()


我想从数据库中的Stuffs中收集Stuff实例。假设我想从数据库中当前的Stuff实例创建以下类的新实例。

class StuffsCollection(Document):
lotsofstuffs = ListField(ReferenceField(Stuff))


ReferenceField文档中,创建StuffsCollection实例的唯一方法似乎是首先创建Stuff实例,然后将其作为关键字参数传递。例如:

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


由于我已经具有引用我的Stuff实例的唯一ID,因此我可以告诉MongoEngine在新的StuffsCollection中使用现有的Stuffs作为关键字参数吗?似乎比查询每个文档的数据库,然后创建该文档的新实例,然后将每个实例传递到我的新ListField中,效率更高。

最佳答案

您需要传递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使用 ReferenceFieldDBRef存储 ObjectID。如果使用 'stuff'配置该字段,则将忽略 DBRefdbref=False参数。否则,这必须是 Stuff对象的集合的名称。

但是,由于在 DBRef中实现验证的方式,在两种情况下都需要将 ReferenceField对象传递给构造函数。

关于flask - 如何使用数据库中已经存在的引用文档创建MongoEngine文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20790874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com