在 python mongoengine 中通过计算 属性 查询

Query by computed property in python mongoengine

我想知道是否可以使用 python 中的 mongoengine 计算属性来查询 MongoDB 中的文档。

目前,我的模型是这样的:

class SnapshotIndicatorKeyValue(db.Document):
    meta = {"collection": "snapshot_indicator_key_values"}

    snapshot_id = db.ObjectIdField(nullable=False)
    indicator_key_id = db.ObjectIdField(nullable=False)
    value = db.FloatField(nullable=False)
    created_at = db.DateTimeField()
    updated_at = db.DateTimeField()

    @property
    def snapshot(self):
        return Snapshot.objects(id=self.snapshot_id).first()

    def indicator_key(self):
        return IndicatorKey.objects(id=self.indicator_key_id).first()

例如 SnapshotIndicatorKeyValue .objects().first().snapshot,我可以访问 snapshot属性。

但是当我尝试查询它时,它不起作用。例如:

SnapshotIndicatorKeyValue.objects(snapshot__date_time__lte=current_date_time)

我收到错误`mongoengine.errors.InvalidQueryError:无法解析字段“快照”``

有什么方法可以让它与查询一起使用吗? 我需要根据 snapshot 的 属性 查询 SnapshotIndicatorKeyValue

为了直接通过 mongoengine 查询 snapshot 属性,您可以引用相关的 snapshot 对象而不是 SnapshotIndicatorKeyValue 中的 snapshot_id文档定义。

使用 Reference field 的修正模型如下:

from mongoengine import Document, ReferenceField

class Snapshot(Document)
property_abc = RelevantPropertyHere() # anything you need

class SnapshotIndicatorKeyValue(Document):
snapshot = ReferenceField(Snapshot)

您将连续保存 Snapshot 的实例和 SnapshotIndicatorKeyValue 的实例,如下所示:

sample_snapshot = Snapshot(property_abc=relevant_value_here) # anything you need
sample_snapshot.save()

sample_indicatorkeyvalue = SnapshotIndicatorKeyValue()
sample_indicatorkeyvalue.snapshot = sample_snapshot
sample_indicatorkeyvalue.save()

然后您可以通过以下方式引用 snapshot 的任何属性:

SnapshotIndicatorKeyValue.objects.first().snapshot.property_abc