2013-05-08 517 views
0

您好,我有一個數據庫(MongoDB),其中有許多日期以毫秒爲單位的條目。 我想提取早上6:00到10:00之間的所有日期條目 我該怎麼做?是否可以在單個查詢中完成? 這樣的事情星期二2012年7月17日14時09分05秒之前提取所有條目例如篩選日期以毫秒爲單位

db.OBSERVABLEPARAMETER.find({startDate:{$lte:1342526945150}}) 
+0

你只是想記錄回來,還是想對每天的記錄進行一些分析? – 2013-05-08 17:37:00

回答

1

模擬到$ LTE運營商也有個$gte (greater-than-or-equal) operator。兩者都可以在同一個對象組合:

db.OBSERVABLEPARAMETER.find({startDate:{$gte:1342560000000, $lte:1342570000000}})

(值不特定的時間戳,他們只是爲了說明這個概念)

這可以讓你獲得一個特定的時間範圍內的所有數據。但是,如果您希望在特定時間段內的所有數據在任何日期爲,那麼對於您和數據庫來說都會變得更加複雜。這樣一個複雜的查詢需要一個帶有javascript函數的$where operator,該函數從時間戳中提取小時,並在6到10之間返回true。

順便說一句:在MongoDB中存儲日期的推薦方式是使用日期類型。不鼓勵使用整數時間戳。請參閱http://docs.mongodb.org/manual/core/document/#document-bson-type-considerations

+0

不幸的是,它不是我設計的分貝,我只需要對它做一些分析,我所有的都是毫秒......所以我需要直接在查詢中放入一個javascript函數,該函數返回自毫秒以來的一天的小時數1970年1月1日? – Mark 2013-05-08 09:50:46

+1

@Mark是的。在$ where函數中''var hours = new Date(this.startDate).getHours()'應該可以獲得小時部分,但我現在無法對其進行測試。 – Philipp 2013-05-08 09:52:44

0

我無法使用javascript構建查詢,我使用php腳本在以這種方式查詢MongoDB的網頁上解決(此函數計算插入字段名爲「glicemia」的對象的平均小時數) at):

public function count_glicemie_momento_media($momento){ 
     try{ 
      // access collection 
      $collection = $this->db->OBSERVABLEPARAMETER; 
      // execute query 
      // retrieve all documents 
      $cursor = $collection->find(array("parameter_name" => "glicemia","measuredValue2"=>$momento, "status" => array('$ne' => "DELETE"))); 
      $sum=0; 
      foreach($cursor as $glicemia){ 
      $sum+=date("G", $glicemia["startDate"]/1000); 
      } 
      return round($sum/$cursor->count(),2); 
     } catch (MongoConnectionException $e) { 
      die('Error connecting to MongoDB server'); 
     } catch (MongoException $e) { 
      die('Error: ' . $e->getMessage()); 
     } 
     return -1; 
    } 
相關問題