sql >> Databasteknik >  >> NoSQL >> MongoDB

Aggregera grupp efter datum med sommartidsförskjutning

Grundkonceptet här är att göra din fråga "medveten" om när "sommartid" både "startar" och "slutar" för den givna frågeperioden och helt enkelt skicka detta test till $cond för att avgöra vilken "offset" som ska användas:

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

Så du kan göra det lite mer komplext när du täcker flera år, men det är fortfarande grundprincipen. På södra halvklotet är du alltid sträcker sig över ett år så varje villkor skulle vara ett "intervall" av "start" till "slut på året" och "början av året" till "slut". Därför en $or med en inre $and inom det "intervall" som visas.

Om du har olika värden att tillämpa, upptäck då när du "bör" välja endera och använd sedan $cond .




  1. subtraktion i mongo query fungerar inte?

  2. Få ett objektantal med MongoDB C# drivrutinsfrågebyggare

  3. Kunde inte ansluta till server 127.0.0.1:27017 anslutningsförsök misslyckades MongoDB

  4. MongoDB $toInt