2011-09-24 13 views
6

Voglio interrogare una raccolta e ottenere documenti che sono stati creati meno di 3 ore fa.Come interrogare in base al tempo in 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); 

C'è un modo efficace per mettere

$ some_condition

parte senza l'utilizzo di IF in PHP?

+0

Non vedo alcuna istruzione if nel codice ... è davvero questo il tuo codice? – dcrosta

+1

Penso che tu abbia sbagliato l'ordine della tua condizione. '$ lt' legge da sinistra a destra, quindi vuoi l'equivalente PHP di' {time: {$ lt: mongotime}} ', che sarebbe' array ('time' => array ('$ lt' => $ mongotime)) ' – dcrosta

+0

@drcosta no questo è solo uno pseudocodice che sto cercando di fare. Invece di usare Trova(), ottenere valore dal risultato della query e determinare la condizione in base a quel valore, voglio ottenere immediatamente risultati di qualifica senza utilizzare alcuna istruzione If in PHP. – InspiredJW

risposta

9

Ho trovato la soluzione.

$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

Il tuo calcolo di '$ realtime' è dispendioso, potresti semplicemente fare' $ mongotime = new MongoDate (time() - $ diff) ' – salathe

+0

Per la versione più recente della php La classe di Mongodate è deprecata. puoi dare un esempio con l'ultima versione di PHP –

1

Per prima cosa prendi il tempo tre ore prima. Poi tua ricerca più grande di quel tempo:

define('SECONDS_PER_HOUR', 3600); 

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

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

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

Non v'è alcun bisogno di fare un po 'timestamp -> string -> conversione timestamp (come lei ha suggerito di esso) e si dovrebbe denominare le costanti che si utilizzano in modo che sia chiaro ciò che essi rappresentano.

Problemi correlati