sql >> データベース >  >> NoSQL >> MongoDB

夏時間オフセットを使用して日付別にグループを集計

    ここでの基本的な概念は、特定のクエリ期間の「夏時間」が「開始」と「終了」の両方のタイミングをクエリに「認識」させ、このテストを $cond 使用する「オフセット」を決定するには:

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

    したがって、数年をカバーする場合、それをもう少し複雑にすることができますが、それでも基本的な原則です。南半球では、あなたは常に 1年にまたがるので、各条件は「開始」から「年末」および「年の初め」から「終了」の「範囲」になります。したがって、$or 内部の$and 実証された「範囲」内の演算子。

    適用する値が異なる場合は、どちらかを「選択する必要がある」時期を検出し、 $cond




    1. マングース-時刻を無視して、日付部分のみで日付を並べ替える

    2. mongodbの日付でグループ化

    3. findOneAndUpdateから返すマングース選択フィールド

    4. Redis-スレーブを手動でマスターに昇格させる