MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Agregar Grupo por Data com Deslocamento de Horário de Verão


O conceito básico aqui é tornar sua consulta "consciente" de quando o "horário de verão" "inicia" e "termina" para um determinado período de consulta e simplesmente fornecer este teste para $cond para determinar qual "deslocamento" usar:
db.collection.aggregate([
    { "$group": {
       "_id": {
           "$week": {
               "$add": [
                  "$Timestamp",
                  { "$cond": [
                      { "$and": [
                          { "$gte": [
                             { "$dayOfyear": "$Timestamp" },
                             daylightSavingsStartDay 
                          ]},
                          { "$lt": [ 
                             { "$dayOfYear": "$Timestamp" },
                             daylightSavingsEndDay
                          ]}
                      ]},
                      daylightSavingsOffset,
                      normalOffset
                  ]}
               ]
           }
       },
       "min": { "$min": "$Timestamp" }
    }}
])

Portanto, você pode tornar isso um pouco mais complexo ao cobrir vários anos, mas ainda é o princípio básico. No hemisfério sul você está sempre abrangendo um ano, de modo que cada condição seria um "intervalo" de "início" a "fim do ano" e "início do ano" a "fim". Portanto, um $or com um $and interno dentro do "intervalo" demonstrado pelos operadores.

Se você tiver valores diferentes para aplicar, detecte quando "deve" escolher um deles e aplique usando $cond .