2016-03-03 23 views
6

Sau khi nâng cấp lên trình điều khiển Mongo mới cho PHP, tôi đang đối mặt với vấn đề sắp xếp và truy vấn ngày tháng.Truy vấn với MongoDate vs UTCDateTime

Trình điều khiển cũ được sử dụng: http://php.net/manual/en/class.mongodate.php lưu trữ ngày tháng trong đối tượng MongoDate tính bằng giây.

Trình điều khiển mới: http://php.net/manual/en/class.mongodb-bson-utcdatetime.php lưu trữ ngày ở định dạng khác và lưu trữ theo mili giây.

Đã kết xuất truy vấn với $ gte hoặc $ lte vô ích. Ví dụ:

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

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

Hai số này không trả về cùng một kết quả. Với tất cả các dữ liệu cũ, làm thế nào tôi có thể truy vấn một cách an toàn với cả MongoDate và UTCDateTime?

+0

thể bạn [cho phép profiler] (https://docs.mongodb.org/manual/reference /method/db.setProfilingLevel/) và hiển thị truy vấn nào mà cả hai trình điều khiển đều tạo ra? –

+0

Theo tài liệu, không giống 'MongoDate',' UTCDateTime' phải được chuyển dấu thời gian theo cách thủ công theo mili giây, như 'new UTCDateTime (round (microtime (true) * 1000));'. Điều này làm cho mã của bạn không hợp lệ và không thể được sao chép để giúp bạn. – Parziphal

Trả lời

0

Bạn cần phải vượt qua thời gian trong mili giây thay vì vài giây, và mọi thứ sẽ tiếp tục làm việc như trước đây:

$time = time(); 
$cursor = $collection->find(['start_date' => ['$gte' => new MongoDB\BSON\UTCDateTime($time * 1000)]]); 
Các vấn đề liên quan