гранулярность в сортировке дат MongoDB?

Можно ли сортировать значения даты MongoDB с точностью?

Я хотел бы упорядочить результаты по дате, но меня не волнуют данные о часах/минутах/секундах. Я бы предпочел не хранить дополнительный параметр, например «20101215».


person ceejayoz    schedule 15.12.2010    source источник
comment
Если вас это не волнует, то какое значение имеет использование полной даты при сортировке? Результаты по-прежнему сортируются по дате, когда они, безусловно, сортируются по дате и времени.   -  person Ian Mercer    schedule 16.12.2010
comment
@Hightechrider Вариант использования для новостного сайта. Я сохраняю время создания и обновления для новостей, но первую страницу сайта нужно сортировать по дням (например, 2010-12-17), а затем по другим факторам. Если я сортирую по точной отметке времени, все остальные факторы не имеют смысла, поскольку каждый элемент имеет разные часы/минуты/секунды в пределах этой даты. В MySQL я бы сделал что-то вроде ORDER BY DATE(created), priority.   -  person ceejayoz    schedule 17.12.2010


Ответы (1)


Короткий ответ на ваш вопрос: «Нет». Это невозможно без сохранения другого поля. Даже если бы это было возможно, вы бы не захотели b/c при сортировке в Mongo, вам действительно нужно индексировать поля, по которым вы сортируете, иначе БД нужно будет сканировать каждый документ в БД, чтобы выполнить сортировку. Поэтому, если бы вы делали то, что предлагаете, вам также нужно было бы индексировать поле частичной даты, что также невозможно в монго.

Я думаю, что лучшим подходом было бы хранить 2 поля: одно для года/месяца/дня, а другое для часа/мин/сек. Тогда у вас будет больше гибкости при сортировке и индексации. Это не так чисто или идеально, как вам, вероятно, хотелось бы, но это единственный вариант с db.

Другим вариантом было бы уточнить порядок в вашем приложении после того, как будут возвращены результаты.

person sym3tri    schedule 28.12.2010