sql >> Databáze >  >> NoSQL >> MongoDB

Souhrnná skupina podle data s posunem letního času

Základním konceptem je, aby si váš dotaz „uvědomil“, kdy „začíná“ i „končí“ „letní čas“ pro dané období dotazu, a jednoduše dodejte tento test uživateli $cond za účelem určení, který "offset" použít:

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

Takže to můžete udělat trochu složitější, když budete pokrývat několik let, ale stále je to základní princip. Na jižní polokouli jste vždy pokrývající rok, takže každá podmínka by byla „rozsahem“ „začátek“ až „konec roku“ a „začátek roku“ až „konec“. Proto $or s vnitřním $and v rámci předvedeného "rozsahu".

Pokud chcete použít jiné hodnoty, zjistěte, kdy byste si „měli“ vybrat jednu z nich, a poté použijte $cond .




  1. Neošetřené odmítnutí slibu:Chyba:Chybná adresa URL, nelze ji analyzovat

  2. MongoDB:výstup 'id' místo '_id'

  3. MongoDB &Meteor - Dotaz k vložení do vnořeného pole nefunguje, nebyla vyvolána žádná chyba

  4. Opakování výsledků pomocí externího volání API a findOneAndUpdate