sql >> Base de Datos >  >> NoSQL >> MongoDB

Grupo agregado por fecha con compensación de horario de verano

El concepto básico aquí es hacer que su consulta sea "consciente" de cuándo "comienza" y "finaliza" el "horario de verano" para el período de consulta dado y simplemente proporcionar esta prueba a $cond para determinar qué "compensación" usar:

db.collection.aggregate([
    { "$group": {
       "_id": {
           "$week": {
               "$add": [
                  "$Timestamp",
                  { "$cond": [
                      { "$and": [
                          { "$gte": [
                             { "$dayOfyear": "$Timestamp" },
                             daylightSavingsStartDay 
                          ]},
                          { "$lt": [ 
                             { "$dayOfYear": "$Timestamp" },
                             daylightSavingsEndDay
                          ]}
                      ]},
                      daylightSavingsOffset,
                      normalOffset
                  ]}
               ]
           }
       },
       "min": { "$min": "$Timestamp" }
    }}
])

Así que puedes hacer eso un poco más complejo cuando cubres varios años, pero sigue siendo el principio básico. En el hemisferio sur estás siempre abarcando un año, por lo que cada condición sería un "rango" de "inicio" a "fin de año" y "principio de año" a "final". Por lo tanto un $or con un $and interno dentro de los operadores de "rango" demostrados.

Si tiene diferentes valores para aplicar, detecte cuándo "debería" elegir cualquiera y luego aplique usando $cond .