我已经通过 MapReduce 获取了一些 ID。我已经按照一些标准对这些 ID 进行了排序,现在我需要按照这个特定的顺序获取这些对象:
MyModel.find(ids)
对吧?但它返回的对象不在存储 id 的顺序中。看起来这和
MyModel.where(:_id.in => ids)
它不会以与存储 ID 相同的顺序返回获取的对象。
现在我可以做到了
ids.map{|id| MyModel.find(id)}
这将完成这项工作,但它会多次敲击数据库。
最佳答案
正在研究类似的问题并找到了更简洁的解决方案:
objs = MyModel.find(ids).sort_by{|m| ids.index(m.id) }
基本上只是使用排序 block 来获取元素的索引。
关于ruby-on-rails - Mongoid:通过id数组查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7533104/