函数中mongoengine中的计算字段

问题描述

为避免在mongoengine Document上显式计算和设置字段,我希望将其作为计算字段。目前有可能吗?

这是我期望的MWE:

class Task(Document):
    Meta = {"collection": "tasks"}

    @property
    def get_values_count(self):
        return len(self.values)

    dateAdded = DateTimeField()
    dateStarted = DateTimeField(default=datetime.utcNow())
    values = ListField(IntField())
    values_count = IntField(default=get_values_count) # Either this,normal class functions not supported by Documents
    # values_count = IntField(default = lambda : len(self.values)) //Or this (this won't compile)

实现这种目标的任何方法吗?

解决方法

如果我正确理解,则您不想在数据库中存储values_count。因此,您只需使用@property

class Task(Document):
    meta = {"collection": "tasks"}

    @property
    def values_count(self):
        return len(self.values)

    dateAdded = DateTimeField()
    dateStarted = DateTimeField(default=datetime.utcnow())
    values = ListField(IntField())