Упорядочить элементы в MongoDB в соответствии с размером массива с помощью MongoMapper? - PullRequest
3 голосов
/ 24 января 2010

Я бы хотел выбрать коллекцию упорядоченных элементов на основе количества элементов в массиве. Надеюсь, следующий пример прояснит мое довольно слабое объяснение:

class Thing
  include MongoMapper::Document

  key :name, String
  key :tags, Array
end

Я бы хотел получить все заказанные Thing из тех, у кого больше тегов, у тех, у кого меньше всего Теги в этом примере - это просто строки в массиве тегов. В основном я хочу что-то, что означает то же самое, что и это (но работает):

Thing.all(:order => 'tags.count desc')

Возможно ли это?

1 Ответ

3 голосов
/ 24 января 2010

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

class Thing
  include MongoMapper::Document

  key :name,     String
  key :tags,     Array
  key :tag_size, Integer, :default => 0, :index => true
end

Затем просто добавьте в вашу модель обратный вызов, который обновляет tag_size при сохранении.

Если эту функцию вы хотели бы видеть на главном сервере, вы можете добавить случай здесь:

http://jira.mongodb.org/browse/SERVER

...