您好,我有一個數據庫(MongoDB),其中有許多日期以毫秒爲單位的條目。 我想提取早上6:00到10:00之間的所有日期條目 我該怎麼做?是否可以在單個查詢中完成? 這樣的事情星期二2012年7月17日14時09分05秒之前提取所有條目例如篩選日期以毫秒爲單位
db.OBSERVABLEPARAMETER.find({startDate:{$lte:1342526945150}})
您好,我有一個數據庫(MongoDB),其中有許多日期以毫秒爲單位的條目。 我想提取早上6:00到10:00之間的所有日期條目 我該怎麼做?是否可以在單個查詢中完成? 這樣的事情星期二2012年7月17日14時09分05秒之前提取所有條目例如篩選日期以毫秒爲單位
db.OBSERVABLEPARAMETER.find({startDate:{$lte:1342526945150}})
模擬到$ 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
我無法使用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;
}
你只是想記錄回來,還是想對每天的記錄進行一些分析? – 2013-05-08 17:37:00