Фильтр встроенных документов, соответствующих условию в MongoEngine, Django, GraphQl
Структура документа
Data
class Data(EmbeddedDocument):
v = FloatField()
q = StringField()
co2 = FloatField()
price = FloatField()
ts = DateTimeField()
Данные счетчиков
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))
Я использую этот запрос.
Query
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 должен возвращать только первый совпадающий результат. Но в моем случае мне нужны все совпадающие результаты.
Результат запроса
Я искал везде, но не могу найти решение.
Я исправил проблему с помощью хака. Более подробно здесь