您好,我有一个数据库(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