文件结构
数据
class Data(EmbeddedDocument):
v = FloatField()
q = StringField()
co2 = FloatField()
price = FloatField()
ts = DateTimeField()
Jmeter 数据
class MetersData(DynamicDocument):
meta = {'collection': 'dk_heating'}
_id = ObjectIdField()
ident = StringField()
meteringPointId = StringField()
customer = StringField()
cvr = StringField()
type = StringField()
unit = StringField()
address = StringField()
period = EmbeddedDocumentField(Period)
hourly_data = ListField(EmbeddedDocumentField(Data), db_field='data')
daily_data = ListField(EmbeddedDocumentField(Data))
monthly_data = ListField(EmbeddedDocumentField(Data))
# monthly_data = EmbeddedDocumentListField(Data)
yearly_data = ListField(EmbeddedDocumentField(Data))
我正在使用此查询。
查询
MetersData.objects.filter(address=address, customer=customer).fields(
monthly_data={"$elemMatch": {"q": "E"}},
address=1, customer=1, cvr=1, ident=1, meteringPointId=1, type=1, unit=1, period=1)
它只返回第一个匹配的元素。我读过文档,它说$elemMatch应该只返回第一个匹配的结果。但是在我的例子中,我需要所有的匹配结果。
查询结果
我到处都找遍了,但还是找不到解决办法。
1条答案
按热度按时间fjnneemd1#
我使用MongoDB管道修复了这个问题。