2013-05-08 2 views
0

Здравствуйте, у меня есть DB (MongoDB) со многими записями с датой в миллисекундах. Я хочу извлечь все записи, которые имеют дату между 6:00 и 10:00 утра Как я могу это сделать? Можно ли сделать это в одном запросе? Что-то вроде этого извлечь все записи перед тем Вт Июл 17 2012 14:09:05, напримерДата фильтрации в миллисекундах

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

Вы просто хотите вернуть данные или вы хотите провести анализ данных, которые попадают между этими моментами каждый день? –

ответ

1

аналог $ Ге-оператора есть также $gte (greater-than-or-equal) operator. Оба они могут быть объединены в одном объекте:

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

(значения не являются специфическими метки времени, они просто для иллюстрации концепции)

Это позволяет получить все данные в определенный период времени. Но когда вы хотите иметь все данные за определенный период времени в любой день, это становится намного сложнее, как для вас, так и для базы данных. Для такого сложного запроса требуется $where operator с функцией javascript, которая извлекает часы из метки времени и возвращает значение true, когда они находятся между 6 и 10.

Кстати: рекомендуемый способ хранения дат в MongoDB использует тип Date , Использование целых временных меток не рекомендуется. См. http://docs.mongodb.org/manual/core/document/#document-bson-type-considerations

+0

К сожалению, это не я db, я разработал, мне просто нужно сделать некоторый анализ на нем, и все, что у меня есть миллисекунды ... поэтому мне нужно поставить непосредственно в запрос функцию javascript, которая возвращает час дня с учетом миллисекунд 1 января 1970 года? – Mark

+1

@Mark да. 'var hours = new Date (this.startDate) .getHours()' в функции $ where должен получить вам часовую часть, но я не могу ее протестировать прямо сейчас. – Philipp

0

Я не смог построить запрос с помощью javascript, я решил с помощью php-скрипта на веб-странице, которая запросит MongoDB таким образом (эта функция вычисляет средний час, когда объект с именем поля «гликемия» вставлен 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; 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^