MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Grupuj według daty z przesunięciem czasu letniego

Podstawową koncepcją jest sprawienie, aby zapytanie było „świadome”, kiedy „czas letni” zarówno „rozpoczyna się”, jak i „kończy się” w danym okresie zapytania i po prostu dostarcza ten test do $cond aby określić, którego „przesunięcia” użyć:

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

Możesz więc trochę to skomplikować, gdy obejmujesz kilka lat, ale nadal jest to podstawowa zasada. Na półkuli południowej jesteś zawsze obejmujący rok, więc każdy warunek byłby „zakresem” od „początku” do „końca roku” i od „początku roku” do „końca”. Dlatego $or z wewnętrznym $and w obrębie zademonstrowanych operatorów „zakresu”.

Jeśli masz różne wartości do zastosowania, wykryj, kiedy „należy” wybrać jedną z nich, a następnie zastosuj za pomocą $cond .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongodb uprawnienia do katalogu danych

  2. MongoDB nie łączy się z MongoHQ za pomocą Mongoid

  3. Jak utworzyć plik konfiguracyjny dla MongoDB

  4. mangusta sumuje wartość we wszystkich dokumentach

  5. Mongoose — nie można utworzyć więcej niż 4 pól za pomocą funkcji „findOrCreate”