fl0*_*00r 9 ruby ruby-on-rails mongodb mongoid
我通过MapReduce获取了一些id.我按照某些标准对这些ID进行了排序,现在我需要按照这个特定的顺序获取这些对象:
MyModel.find(ids)
Run Code Online (Sandbox Code Playgroud)
对?但它返回的对象不是存储ids的顺序.看起来像是一样的
MyModel.where(:_id.in => ids)
Run Code Online (Sandbox Code Playgroud)
它不会以与存储的id相同的顺序返回获取的对象.
现在我可以做到这一点
ids.map{|id| MyModel.find(id)}
Run Code Online (Sandbox Code Playgroud)
这将完成这项工作,但它会多次敲打数据库.
mu *_*ort 10
拥有所有对象后,您可以手动进行排序.像这样的东西:
ordering = { }
ids.each_with_index { |id, i| ordering[id] = i }
objs = MyModel.find(ids).sort_by { |o| ordering[o.id] }
Run Code Online (Sandbox Code Playgroud)
njo*_*den 10
正在研究类似的问题,并找到了一个更简洁的解决方案:
objs = MyModel.find(ids).sort_by{|m| ids.index(m.id) }
Run Code Online (Sandbox Code Playgroud)
基本上只是使用sort块来阻止元素的索引.
| 归档时间: |
|
| 查看次数: |
5328 次 |
| 最近记录: |