Сортировка по целому числу как логическое в монгоиде

У меня есть приложение rails с моделью mongoid. В этой модели есть поле счетчика, которое является целым числом. Я хочу отсортировать записи по этому полю, приведенному к логическому значению, например

MyModel.desc("counter::boolean") # casting in postgres-like syntax

поэтому записи со счетчиком > 0 идут первыми, а те, у которых счетчик == 0, идут последними.

Я также использую сортировку created_at для этого выражения, которая правильно работает только для одного и того же значения счетчика, поэтому мне нужно иметь только два возможных значения. Не обязательно верно/ложно, может быть 1/0.

MongoDB не поддерживает пользовательские функции сортировки (для этого есть открытый билет).

Возможно ли такое литье в mongoid/mongodb? Если нет, то может есть обходные пути?


person Ineu    schedule 06.12.2012    source источник
comment
Вы получаете все документы? В приложении нельзя сортировать?   -  person Sergio Tulentsev    schedule 06.12.2012
comment
сортировка числа по описанию также даст желаемый результат, не нужно приводить его к логическому значению   -  person Sammaye    schedule 06.12.2012
comment
@Sammaye, извините, мое описание сбивает с толку. У меня также есть сортировка по created_at, которая работает только для одинаковых значений счетчика. Я добавлю это к вопросу.   -  person Ineu    schedule 06.12.2012
comment
@SergioTulentsev, я предпочитаю по возможности избегать сортировки в приложении.   -  person Ineu    schedule 06.12.2012


Ответы (1)


Не очень красивый способ, но вы можете создать дополнительное поле в документах со значением, зависящим именно от вашей схемы сортировки, например: "order": привести значение к логическому, а затем отсортировать по нему.
Удивительно - это довольно распространенный способ обойти ограничения mongodb.

person mrówa    schedule 06.12.2012