2014-10-13 2 views
1

У меня проблема. Мне нужно получить документы с моего монгоба, используя mongoid в Rails. У меня есть массив идентификаторов, таких как ["54397dea477269151d000000", "543ad4bc477269c09f000000", "543ad4bc474269c09f000000"]. И если я нахожу документы вроде:Неупорядоченные документы выбора от mongodb от ids

Item.find(ids) 

Он возвращает упорядоченный массив объектов. Но мне нужно, чтобы объекты были эквивалентны массиву ids. есть ли возможность получить его одним запросом на выбор в базу данных?

ответ

2

Самый простой способ сделать это, чтобы сделать это за пределами MongoDB:

ids = [ ... ] 
items = Item.find(ids).sort_by { |i| ids.index(i.id) } 

Если ids являются строками, а не идентификаторы объектов, вам придется обрабатывать преобразование типа сами:

ids = %w[54397dea477269151d000000 543ad4bc477269c09f000000 543ad4bc474269c09f000000] 
items = Item.find(ids).sort_by { |i| ids.index(i.id.to_s) } 

Если вы делаете такого рода вещи много затем добавить свой собственный метод класса:

def self.find_in_order(ids) 
    ids = ids.map(&:to_s) # Or force them to be object IDs instances and leave out the to_s below... 
    find(ids).sort_by { |i| ids.index(i.id.to_s) } 
end 

Этот вид «сделай это вручную в рубине» довольно часто встречается при работе с MongoDB.

+0

У меня была такая же идея, но я надеялся, что есть какие-либо решения, предоставленные mongo ... – freeze

+0

Не то, что я знаю, запрос MongoDB «язык» очень ограничен. –

Смежные вопросы