sql >> Database teknologi >  >> NoSQL >> MongoDB

Aggreger gruppe efter dato med sommertid offset

Det grundlæggende koncept her er at gøre din forespørgsel "bevidst" om, hvornår "sommertid" både "starter" og "slutter" for den givne forespørgselsperiode og blot levere denne test til $cond for at bestemme hvilken "offset" der skal bruges:

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øre det lidt mere komplekst, når du dækker flere år, men det er stadig grundprincippet. På den sydlige halvkugle er du altid strækker sig over et år, så hver betingelse ville være et "interval" af "start" til "slutning af året" og "begyndelse af året" til "slut". Derfor en $or med en indre $and inden for det viste "område"-operatorer.

Hvis du har forskellige værdier at anvende, så find ud af, hvornår du "bør" vælge enten, og anvend derefter ved hjælp af $cond .




  1. Hvordan laver man et billedvalg med ejs og express?

  2. Spring Data MongoDB BigDecimal-understøttelse

  3. Hvordan opdaterer man egenskaber i flere objekter i et array for et dokument i Meteor-samling/minimongo?

  4. Morphia/MongoDB:Adgang til indlejringsobjekt fra et @Embedded objekt