Упорядочить элементы в MongoDB в соответствии с размером массива с помощью MongoMapper?
Я хотел бы выбрать коллекцию элементов, упорядоченных по количеству элементов в массиве. Надеюсь, следующий пример прояснит мое довольно слабое объяснение:
class Thing
include MongoMapper::Document
key :name, String
key :tags, Array
end
Я хотел бы получить все Thing
Заказывается у тех, у кого больше меток, у тех, у кого меньше всего. Теги в этом примере - это просто строки в массиве тегов. В основном я хочу что-то, что означает то же самое, что и это (но работает):
Thing.all(:order => 'tags.count desc')
Это возможно?
1 ответ
Главный сервер в настоящее время не поддерживает вычисление размера массива и последующую сортировку по нему. Я думаю, что на данный момент вам лучше всего кэшировать размер массива самостоятельно и добавить индекс в это поле.
class Thing
include MongoMapper::Document
key :name, String
key :tags, Array
key :tag_size, Integer, :default => 0, :index => true
end
Затем просто добавьте обратный вызов в вашу модель, который обновляет tag_size при сохранении.
Если это функция, которую вы хотели бы видеть на главном сервере, вы можете добавить случай здесь: