django - MongoEngine _types 和 _cls 字段

标签 django mongoengine

为什么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/

相关文章:

python - 如何使用flask mongoengine处理ReferenceField迁移?

python - 我如何在我的计算机上托管我的 django 项目并从世界任何地方访问它?

python - 有没有办法结合CreateView和UpdateView?

python - 如何使用flask-restplus的fields.Url进行mongoengine文档查询集?

python - Mongoengine Document对象无法使用from_json更新

django - 在settings.py中的mongoengine connect()测试问题

Django 没有外键...但它是一个 ManyToManyField

django - 使用 ElasticSearch 作为 Django 的数据库/存储

django - ForeignKey(unique=True) 通常由 OneToOneField 提供更好的服务

mongodb - 如何使用mongoengine在EmbeddedDocument中定义objectid?