1

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

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

2 回答 2

1

与 $lte-operator 类似,还有$gte (greater-than-or-equal) operator。两者都可以组合在同一个对象中:

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

(值不是特定的时间戳,它们只是为了说明这个概念)

这使您可以获取特定时间范围内的所有数据。但是,当您想在任何一天获取特定时间段内的所有数据时,对于您和数据库来说,它都会变得更加复杂。这样一个复杂的查询需要一个带有 javascript 函数的$where 运算符,该函数从时间戳中提取小时数,并在它们介于 6 到 10 之间时返回 true。

顺便说一句:在 MongoDB 中存储日期的推荐方法是使用 Date 类型。不鼓励使用整数时间戳。请参阅http://docs.mongodb.org/manual/core/document/#document-bson-type-considerations

于 2013-05-08T09:37:27.807 回答
0

我无法使用 javascript 构建查询,我通过网页上的 php 脚本解决了以这种方式查询 MongoDB 的问题(此函数计算插入字段名称为“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;
    }
于 2013-05-27T14:39:36.387 回答