2011-09-24 7 views
6

Je souhaite interroger une collection et obtenir des documents créés il y a moins de trois heures.Comment faire une requête par temps dans MongoDB avec 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); 

est-il un moyen efficace de mettre

some_condition $

partie sans utiliser l'instruction IF en PHP?

+0

Je ne vois aucune instruction if dans votre code ... est-ce vraiment ce à quoi ressemble votre code? – dcrosta

+1

Je pense que vous avez également l'ordre de votre état mal. '$ lt' lit de gauche à droite, donc vous voulez l'équivalent PHP de' {time: {$ lt: mongotime}} ', ce qui serait' array ('time' => array ('$ lt' => $ mongotime)) ' – dcrosta

+0

@drcosta non c'est juste un pseudo-code que j'essaie de faire. Au lieu d'utiliser Find(), obtenir la valeur du résultat de la requête et déterminer la condition par cette valeur, je veux obtenir des résultats de qualification tout de suite sans utiliser d'instruction If dans PHP. – InspiredJW

Répondre

9

J'ai trouvé la solution.

$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

Votre calcul de '$ realtime' est inutile, vous pouvez simplement faire' $ mongotime = new MongoDate (time() - $ diff); ' – salathe

+0

Pour la dernière version de php, la classe Mongodate est obsolète. pouvez-vous donner un exemple avec la dernière version de php –

1

D'abord obtenir l'heure trois heures avant maintenant. Ensuite, une requête plus grande que celle du temps:

define('SECONDS_PER_HOUR', 3600); 

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

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

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

Il n'y a pas besoin de faire de l'horodatage -> string -> conversion d'horodatage (comme vous le suggérez) et vous devez nommer les constantes que vous utilisez donc il est clair ce qu'ils représentent.

Questions connexes