过滤日期(以毫秒为单位)

时间:2013-05-08 09:24:57

标签: mongodb date milliseconds

您好我有一个DB(MongoDB),其中有许多条目,日期以毫秒为单位。 我想提取早上6点到10点之间日期的所有条目 我该怎么做?是否可以在单个查询中执行此操作? 像这样的东西在Tue Jul 17 2012 14:09:05之前提取所有条目,例如

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

2 个答案:

答案 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;
    }