2017-08-15 37 views
0
mongodate

我insertd數據集團在MongoDB中

{ "_id" : ObjectId("5992e6f52479d56b0b2709bf"), 
     "TIMESTAMP" : ISODate("2017-08-15T12:19:25.680+0000"), 
     "RECORD" : 20507361.0, 
     "BattV_Min" : 11.9, 
     "SEVolt" : 0.0 
    } 

和我用於獲取日期查詢

 $collection1 = $db->tablename; 
     $filter1 = array('timestamp' => array('$gte' => $acst1, '$lte' => $acst2)); 
     $options1 = array('projection' => array('_id' => 0,'temperature' => 1,timestamp => 1)); 
     $oresult = $collection1->find($filter1,$options1); 

我在數十億獲取數據,所以我想優化使用GROUP BY方法我的查詢,就像我有70000以下的數據一樣,如果我的數據範圍在70000到100000之間,那麼我將按秒分組,如分鐘,按時間和按天分組。

回答

0

可以使用聚合函數通過MongoDB中使用組相比,日期格式,只要你想的項目,如果你想列值也比使用$ addToSet功能和項目,平均值使用AVG函數。

$collection1 = $db->tablename; 
       $oresult = $collection1->aggregate([ 
           [ 
            '$match' => array(TIMESTAMP => array('$gte' => $acst1, '$lte' => $acst2)) 
           ], 
           [ 
            '$project' => [ 
            'year' => ['$year' =>'TIMESTAMP'], 
             'month' => ['$month' => '$TIMESTAMP'], 
             'day' => ['$dayOfMonth' => '$TIMESTAMP'], 
             'hour' => ['$hour' => '$TIMESTAMP'], 
             'minute' => ['$minute' => '$TIMESTAMP'], 
             'second' => ['$second' => '$TIMESTAMP'], 
             'millisecond' => ['$millisecond' => '$TIMESTAMP'], 
              'value' => '$BattV' 

            ] 
           ], 
           [ 
            '$group' => [ 
             '_id' => [ 
              'year' => '$year', 
              'month' => '$month', 
              'day' => '$day', 
              'hour' => '$hour', 
              'minute' => '$minute', 
              'second' => '$second', 
              'millisecond' => '$millisecond' 

             ], 
             'count' => ['$sum' => 1], 
             'values' => ['$addToSet' => '$value'] 
            ] 
           ], 
           [ 
            '$sort' => ['_id' => 1] 
           ], 
           [ 
            '$project' => [ 
             'a' => '$count', 
             'new' => ['$avg' => '$values'], 
             'y' => [ 
              '$concat' => [ 
               ['$substr' => ['$_id.year', 0, 4]], 
               '-', 
               [ 
                '$cond' => [ 
                 ['$lte' => ['$_id.month', 9]], 
                 [ 
                  '$concat' => [ 
                   '0', 
                   ['$substr' => ['$_id.month', 0, 2]], 
                  ] 
                 ], 
                 ['$substr' => ['$_id.month', 0, 2]] 
                ] 
               ], 
               '-', 
               [ 
                '$cond' => [ 
                 ['$lte' => ['$_id.day', 9]], 
                 [ 
                  '$concat' => [ 
                   '0', 
                   ['$substr' => ['$_id.day', 0, 2]], 
                  ] 
                 ], 
                 ['$substr' => ['$_id.day', 0, 2]] 
                ] 
               ], 
               ' ', 
               [ 
                '$cond' => [ 
                 ['$lte' => ['$_id.hour', 9]], 
                 [ 
                  '$concat' => [ 
                   '0', 
                   ['$substr' => ['$_id.hour', 0, 2]], 
                  ] 
                 ], 
                 ['$substr' => ['$_id.hour', 0, 2]] 
                ] 
               ], 
               ':', 
               [ 
                '$cond' => [ 
                 ['$lte' => ['$_id.minute', 9]], 
                 [ 
                  '$concat' => [ 
                   '0', 
                   ['$substr' => ['$_id.minute', 0, 2]], 
                  ] 
                 ], 
                 ['$substr' => ['$_id.minute', 0, 2]] 
                ] 
               ], 
               ':', 
               [ 
                '$cond' => [ 
                 ['$lte' => ['$_id.second', 9]], 
                 [ 
                  '$concat' => [ 
                   '0', 
                   ['$substr' => ['$_id.second', 0, 2]], 
                  ] 
                 ], 
                 ['$substr' => ['$_id.second', 0, 2]] 
                ] 
               ], 
               '.', 
               [ 
                '$cond' => [ 
                 ['$lte' => ['$_id.millisecond', 9]], 
                 [ 
                  '$concat' => [ 
                   '0', 
                   ['$substr' => ['$_id.millisecond', 0, 1]], 
                  ] 
                 ], 
                 ['$substr' => ['$_id.millisecond', 0, 1]] 
                ] 
               ] 

              ] 
             ], 
            ] 
           ] 
          ] 
         ); 
+0

這就是我想感謝工作完美! –