| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- from mongoengine import connect, EmbeddedDocument, Document, StringField, IntField, ListField, EmbeddedDocumentField
- connect('Medidores', host='192.168.100.5', port=27017, username='mailScheduler', password='pqowieuryt')
- class Medicion(EmbeddedDocument):
- descripcion = StringField()
- registro = IntField()
- lectura = StringField()
- class Logs(Document):
- meta = {'collection': 'meters_logs'}
- serialNumber = StringField()
- meterLogNumber = IntField()
- logDate = StringField()
- saveDate = StringField()
- mediciones = ListField(EmbeddedDocumentField(Medicion))
- class LogRetriever:
- def __init__(self, serial_number, log_number, register):
- self.serial_number = serial_number
- self.log_number = log_number
- self.register = register
- def _make_pipeline(self, start_date, end_date, aggregate_by):
- pipeline= [
- {'$project':
- {
- 'serialNumber': 1,
- 'meterLogNumber': 1,
- 'mediciones': 1,
- 'logDate': 1,
- 'hour': {'$hour': {'$dateFromString': {'dateString': '$logDate'}}},
- 'day': {'$dayOfMonth': {'$dateFromString': {'dateString': '$logDate'}}},
- 'month': {'$month': {'$dateFromString': {'dateString': '$logDate'}}},
- 'year': {'$year': {'$dateFromString': {'dateString': '$logDate'}}},
- }
- },
- {'$unwind': '$mediciones' },
- {'$match': {
- 'serialNumber': self.serial_number,
- 'meterLogNumber': self.log_number,
- "mediciones.registro": self.register,
- 'logDate': {'$gte': start_date, '$lt': end_date}}},
- {'$group':
- {
- '_id': aggregate_by,
- 'date': { '$min': '$logDate'},
- 'total': {'$sum': { '$toInt': "$mediciones.lectura"}}
- }
- },
- {'$sort': { 'date': -1 }}
- ]
- return pipeline
- def getByDay(self, start_date, end_date):
- aggregate_by = {
- 'hour': None,
- 'day': '$day',
- 'month': None,
- 'year': None
- }
- serial_number = '0223406118'
- log_number = 2
- register = 4999
- start_date = '2019-07-22 00:00:00' # String
- end_date = '2019-07-23 00:00:00' # String
- mediciones = Logs.objects.aggregate(*pipeline)
|