gpt4 book ai didi

django - MongoEngine _types 和 _cls 字段

转载 作者:行者123 更新时间:2023-12-04 13:52:20 24 4
gpt4 key购买 nike

为什么mongoengine要加 _类型 _cls 集合的每个文档的字段。
它们都是(键,值)对,并且都包含文档模型类的名称。唯一的区别是 _类型 value 是一个列表,如果涉及某些继承,我认为它可以有多个模型类名称。

然而问题是:当所有文档的两个字段都具有相同的值时,为什么我需要它们存在于集合中的每个文档中?

最佳答案

Mongoengine 允许文档继承。定义类时的元属性 allow_inheritance用于允许对这个特定类进行子类化。_cls_types字段用于标识对象属于哪个类。

考虑一个名为 User 的文档用于存储用户信息:

class User(Document):
meta = {'allow_inheritance': True}
# stores information regarding a user

现在考虑一个名为 StackOverFlowUser 的文档。 : 本文档继承自 User文档并为用户保存一些与 StackOverflow 相关的信息:
class StackOverFlowUser(User):
# stores StackOverflow information of a user

对于这两个文档类,mongoengine 将使用名为 user 的相同集合。 .无论您创建哪个文档对象,它都会作为文档存储在此集合中。

要区分对象属于哪个类, _cls_types将使用字段。

对于 User目的:
{
...
'_cls' = 'User',
'_types' = ['User', 'User.StackOverFlowUser']
}

对于 StackOverFlowUser目的:
{
...
'_cls' = 'User.StackOverFlowUser',
'_types' = ['User', 'User.StackOverFlowUser']
}

如果你确定一个文档不会有子类文档,那么设置 allow_inheritanceFalse并且 mongoengine 不会保存 _cls_types该文档的字段。

关于django - MongoEngine _types 和 _cls 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13824569/

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