2011-09-24 19 views
6

Quiero consultar una colección y obtener documentos que se crearon hace menos de 3 horas.¿Cómo consultar por tiempo en MongoDB con PHP?

$realtime = date("Y-m-d H:i:s"); 
$mongotime = New Mongodate(strtotime($realtime)); 

$mongotime = $mongotime - 3 hours; //PSEUDOCODE 
$some_condition = array('time' => array('$lt'=>$mongotime)); 

$result = $db->collection->find($some_condition); 

¿Hay una manera eficaz para poner

$ some_condition

parte sin usar IF en PHP?

+0

No veo ninguna declaración if en su código ... ¿así es como se ve su código? – dcrosta

+1

Creo que también tiene el orden de su condición incorrecta. '$ lt' se lee de izquierda a derecha, por lo que quiere el equivalente PHP de' {time: {$ lt: mongotime}} ', que sería' array ('time' => array ('$ lt' => $ mongotime)) ' – dcrosta

+0

@drcosta no, esto es solo un pseudocódigo que estoy tratando de hacer. En lugar de usar Find(), obtener el valor del resultado de la consulta y determinar la condición por ese valor, quiero obtener resultados calificativos de inmediato sin usar ninguna instrucción If en PHP. – InspiredJW

Respuesta

9

He encontrado la solución.

$diff = 60 * 60 * 3; //3 hours in seconds 

$mongotime = New Mongodate(time()-$diff); 

$condition = array('time' => array('$lt'=>$mongotime)); 

$result = $db->collection->find($condition); 
+4

Su cálculo de '$ realtime' es inútil, puede hacer' $ mongotime = new MongoDate (time() - $ diff); ' – salathe

+0

Para la última versión de php, la clase de Mongodate está obsoleta. puedes dar ejemplo con la última versión de php –

1

Primero, tómese el tiempo tres horas antes de ahora. Entonces se le pregunta más grande que el tiempo:

define('SECONDS_PER_HOUR', 3600); 

$mongotime = New Mongodate(time()-3*SECONDS_PER_HOUR); 

$condition = array('time' => array('$lt'=>$mongotime)); 

$result = $db->collection->find($condition); 

No hay necesidad de hacer algo de marca de tiempo -> string -> conversión de marca de tiempo (como usted sugiere ella) y que deben nombrar las constantes que utiliza así que está claro lo que representan.

Cuestiones relacionadas