Получить список документов монго по идентификаторам, сохраняя порядок

Каков наилучший способ получить список документов mongodb с помощью mongoid в порядке, указанном в списке.

Мое текущее решение:

docs = Doc.where(:_id.in => ids).sort { |x, y| ids.index(x.id) <=> ids.index(y.id) }

Кажется, для этого должно быть лучшее решение с использованием интерфейса запросов mongoid. Есть идеи?


person Peder    schedule 10.04.2011    source источник


Ответы (1)


Если количество идентификаторов невелико, вам может сойти с рук это (хотя нет необходимости сортировать его):

docs = ids.map { |id| Doc.find(id) }

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

Самый близкий метод, который я смог найти, это Doc.criteria.for_ids(ids), но он не будет соблюдать порядок идентификаторов и извлекать каждый документ только один раз. См. этот вопрос.

person Matt    schedule 20.04.2011