sql >> Database >  >> NoSQL >> MongoDB

Geaggregeerde groep op datum met zomertijdoffset

Het basisconcept hier is om uw zoekopdracht "bewust" te maken van wanneer "zomertijd" zowel "begint" als "eindigt" voor de opgegeven zoekperiode en deze test eenvoudigweg aan $cond om te bepalen welke "offset" moet worden gebruikt:

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

Dus je kunt dat iets ingewikkelder maken als je meerdere jaren dekt, maar het blijft het basisprincipe. Op het zuidelijk halfrond ben je altijd die een jaar overspant, dus elke voorwaarde zou een "bereik" zijn van "begin" tot "einde van het jaar" en van "begin van het jaar" tot "einde". Daarom een ​​$or met een innerlijke $and binnen het "bereik" dat door de operators is gedemonstreerd.

Als je verschillende waarden hebt om toe te passen, detecteer dan wanneer je een van beide "moet" kiezen en pas het dan toe met $cond .




  1. MongoDB dropIndexes Commando

  2. Zoek naar documenten waarvan de matrixgrootte groter is dan 1

  3. Singleton-verbinding instellen met node.js en mongo

  4. query in mongo Shell geeft SyntaxError:missing :after property