Mongoid:通过数组ID查找

时间:2011-09-23 18:08:18

标签: ruby-on-rails ruby mongodb mongoid

我通过MapReduce获取了一些ID。我已经按照某些标准对这些ID进行了排序,现在我需要按照这个特定的顺序获取这些对象:

MyModel.find(ids)

右?但它返回的对象不是存储ids的顺序。看起来这和

一样
MyModel.where(:_id.in => ids)

,它不会以与存储的id相同的顺序返回提取的对象。

现在我可以这样做

ids.map{|id| MyModel.find(id)}

这将完成这项工作,但它会多次敲击数据库。

2 个答案:

答案 0 :(得分:10)

正在处理类似的问题,并找到了更简洁的解决方案:

objs = MyModel.find(ids).sort_by{|m| ids.index(m.id) }

基本上只是使用sort块来阻止元素的索引。

答案 1 :(得分:9)

您可以在拥有所有物品后手动进行排序。像这样:

ordering = { }
ids.each_with_index { |id, i| ordering[id] = i }
objs = MyModel.find(ids).sort_by { |o| ordering[o.id] }