2016-03-03 2 views
6

PHP用の新しいMongoドライバにアップグレードした後、日付のソートとクエリの問題に直面しています。MongoDateとUTCDateTimeのクエリ

古いドライバはhttp://php.net/manual/en/class.mongodate.phpで、MongoDateオブジェクトに秒単位で格納されています。

新しいドライバ:http://php.net/manual/en/class.mongodb-bson-utcdatetime.phpは、日付を別の形式で保存し、ミリ秒単位で格納します。

$ gteまたは$ lteを使用してクエリがレンダリングされました。例:

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

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

これらの2つは同じ結果を返しません。すべての古いデータを使って、MongoDateとUTCDateTimeの両方で安全にどのようにクエリできますか?あなたはミリ秒の代わりに、秒単位で時間を渡すために、すべてが前のように作業を続ける必要がある

+0

(https://docs.mongodb.org/manual/reference /method/db.setProfilingLevel/)、両方のドライバが生成するクエリを表示しますか? –

+0

ドキュメントによると、 'MongoDate'と違って、' UTCDateTime'は 'new UTCDateTime(round(microtime(true)* 1000));'のようにミリ秒単位でタイムスタンプを手動で渡さなければなりません。これはあなたのコードを無効にし、あなたを助けるために再現することができません。 – Parziphal

答えて

0

:あなたは[プロファイラを有効にする]でし

$time = time(); 
$cursor = $collection->find(['start_date' => ['$gte' => new MongoDB\BSON\UTCDateTime($time * 1000)]]); 
関連する問題