Запрос даты в Mongoid - PullRequest
       4

Запрос даты в Mongoid

8 голосов
/ 12 сентября 2011

Об этом часто спрашивают, но я все еще сталкиваюсь с некоторыми проблемами с ним.

У меня есть дата, которую я получаю, и она сохраняется как Дата.Мне нужно запросить «Больше чем» и «Меньше чем», поэтому я изменил его на «Время», попробовал еще раз, но получаю странные результаты.

Я делаю это

Class.where(:event_date.gt => Time.parse(Date.today))

и я получаю старые записи 1940-х, 1960-х и других.Я попытался преобразовать время, добавив .utc в конце, сравнивая только с Date.today, но пока ничего не решило проблему.Это селектор, сгенерированный Mongoid

selector: {:date_utc=>{"$gte"=>Sat Sep 10 21:00:00 UTC 2011}},

Я получаю дату в этом формате «2011-09-11» и сохраняю ее в поле «Время».Пытался разобрать это как Time utc, не повезло.

Есть идеи?Я использую Mongoid 2.0.2.Более поздние версии кажутся несовместимыми с другими расширениями, которые я использую.

[ОБНОВЛЕНИЕ]

Так что проблема со старыми датами до 1970 года, очевидно.Как с ними бороться - вопрос сейчас.

1 Ответ

2 голосов
/ 12 сентября 2011

Это известная ошибка в Монго. См. ВЫПУСК 405

Причина в том, что Монго использует беззнаковое число для хранения дат, поэтому все, что происходит до эпохи, переносится далеко в будущее.

К сожалению, эта проблема была исправлена ​​в стабильной версии 2.0, выпущенной сегодня. Обновление до этой версии должно решить вашу проблему.

...