来自ids的mongodb的无序选择文档

时间:2014-10-13 19:36:18

标签: ruby-on-rails mongodb mongoid

我有问题。我需要在Rails中使用mongoid从我的mongodb获取文件。我有一系列ID,如[" 54397dea477269151d000000"," 543ad4bc477269c09f000000"," 543ad4bc474269c09f000000"]。如果我找到像:

这样的文档
Item.find(ids)

它返回一个有序的对象数组。但我需要的对象相当于ids数组。有没有机会通过一个选择请求到达数据库?

1 个答案:

答案 0 :(得分:2)

最简单的方法是在MongoDB之外进行:

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

如果您的ids是字符串而不是对象ID,则您必须自己处理类型转换:

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时,这种“在Ruby中手工完成”的事情很常见。