2016-03-03 15 views
6

Dopo l'aggiornamento al nuovo Mongo Driver per PHP, sto affrontando il problema di ordinare e interrogare le date.Interrogazione con MongoDate vs UTCDateTime

Il vecchio driver utilizzato: http://php.net/manual/en/class.mongodate.php memorizzava le date in un oggetto MongoDate in secondi.

Il nuovo driver: http://php.net/manual/en/class.mongodb-bson-utcdatetime.php memorizza la data in un formato diverso e la memorizza in millisecondi.

L'has ha reso l'interrogazione con $ gte o $ lte inutili. Esempio:

$collection -> find(array('start_date' => array('$gte' => new MongoDate()))); 

$collection -> find(array('start_date' => array('$gte' => new MongoDB\BSON\UTCDateTime()))); 

Questi due non restituiscono lo stesso risultato. Con tutti i vecchi dati, come posso tranquillamente interrogare con MongoDate e UTCDateTime?

+0

Potrebbe [abilitare profiler] (https://docs.mongodb.org/manual/reference /method/db.setProfilingLevel/) e mostra quali query generano entrambi i driver? –

+0

Secondo la documentazione, diversamente da 'MongoDate',' UTCDateTime' deve essere passato manualmente il timestamp in millisecondi, come 'new UTCDateTime (round (microtime (true) * 1000));'. Ciò rende il tuo codice non valido e non può essere riprodotto per aiutarti. – Parziphal

risposta

0

è necessario passare il tempo in millisecondi al posto di secondi, e tutto ciò che sarà continuare a lavorare come prima:

$time = time(); 
$cursor = $collection->find(['start_date' => ['$gte' => new MongoDB\BSON\UTCDateTime($time * 1000)]]);