mongotest.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. from mongoengine import connect, EmbeddedDocument, Document, StringField, IntField, ListField, EmbeddedDocumentField
  2. connect('Medidores', host='192.168.100.5', port=27017, username='mailScheduler', password='pqowieuryt')
  3. class Medicion(EmbeddedDocument):
  4. descripcion = StringField()
  5. registro = IntField()
  6. lectura = StringField()
  7. class Logs(Document):
  8. meta = {'collection': 'meters_logs'}
  9. serialNumber = StringField()
  10. meterLogNumber = IntField()
  11. logDate = StringField()
  12. saveDate = StringField()
  13. mediciones = ListField(EmbeddedDocumentField(Medicion))
  14. class LogRetriever:
  15. def __init__(self, serial_number, log_number, register):
  16. self.serial_number = serial_number
  17. self.log_number = log_number
  18. self.register = register
  19. def _make_pipeline(self, start_date, end_date, aggregate_by):
  20. pipeline= [
  21. {'$project':
  22. {
  23. 'serialNumber': 1,
  24. 'meterLogNumber': 1,
  25. 'mediciones': 1,
  26. 'logDate': 1,
  27. 'hour': {'$hour': {'$dateFromString': {'dateString': '$logDate'}}},
  28. 'day': {'$dayOfMonth': {'$dateFromString': {'dateString': '$logDate'}}},
  29. 'month': {'$month': {'$dateFromString': {'dateString': '$logDate'}}},
  30. 'year': {'$year': {'$dateFromString': {'dateString': '$logDate'}}},
  31. }
  32. },
  33. {'$unwind': '$mediciones' },
  34. {'$match': {
  35. 'serialNumber': self.serial_number,
  36. 'meterLogNumber': self.log_number,
  37. "mediciones.registro": self.register,
  38. 'logDate': {'$gte': start_date, '$lt': end_date}}},
  39. {'$group':
  40. {
  41. '_id': aggregate_by,
  42. 'date': { '$min': '$logDate'},
  43. 'total': {'$sum': { '$toInt': "$mediciones.lectura"}}
  44. }
  45. },
  46. {'$sort': { 'date': -1 }}
  47. ]
  48. return pipeline
  49. def getByDay(self, start_date, end_date):
  50. aggregate_by = {
  51. 'hour': None,
  52. 'day': '$day',
  53. 'month': None,
  54. 'year': None
  55. }
  56. serial_number = '0223406118'
  57. log_number = 2
  58. register = 4999
  59. start_date = '2019-07-22 00:00:00' # String
  60. end_date = '2019-07-23 00:00:00' # String
  61. mediciones = Logs.objects.aggregate(*pipeline)