在 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
我想知道是否可以使用 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