这是使用mongoid按照列表中指定的顺序检索mongodb文档列表的最佳方法。
我目前的解决方案是:
docs = Doc.where(:_id.in => ids).sort { |x, y| ids.index(x.id) <=> ids.index(y.id) }
似乎应该有一个更好的解决方案,使用mongoid查询接口。有任何想法吗?
答案 0 :(得分:3)
如果id的数量很小,你可能会侥幸逃脱(不需要对它进行排序):
docs = ids.map { |id| Doc.find(id) }
缺点当然是它仍将转到每个文档的数据库。
我能找到的最接近的方法是Doc.criteria.for_ids(ids)
但是它不会遵循id的顺序并且只获取每个文档一次。请参阅this question。