您好我有一个DB(MongoDB),其中有许多条目,日期以毫秒为单位。 我想提取早上6点到10点之间日期的所有条目 我该怎么做?是否可以在单个查询中执行此操作? 像这样的东西在Tue Jul 17 2012 14:09:05之前提取所有条目,例如
db.OBSERVABLEPARAMETER.find({startDate:{$lte:1342526945150}})
答案 0 :(得分:1)
与$ lte-operator类似,还有$gte (greater-than-or-equal) operator。两者都可以组合在同一个对象中:
db.OBSERVABLEPARAMETER.find({startDate:{$gte:1342560000000, $lte:1342570000000}})
(值不是特定的时间戳,它们只是为了说明这个概念)
这使您可以在特定时间范围内获取所有数据。但是,如果您希望在任何一天的特定时间段内获得所有数据,那么对于您和数据库来说,它会变得更加复杂。这样一个复杂的查询需要一个带有javascript函数的$where operator,它从时间戳中提取小时数,当它们在6到10之间时返回true。
顺便说一下:在MongoDB中存储日期的推荐方法是使用Date类型。不鼓励使用整数时间戳。见http://docs.mongodb.org/manual/core/document/#document-bson-type-considerations
答案 1 :(得分:0)
我无法使用javascript构建查询,我在以这种方式查询MongoDB的网页上使用php脚本解决了(此函数计算了插入了fieldname“glicemia”的对象的平均小时数):
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;
}