如何在没有模型的情况下通过ID在Mongoid中查找文档?

时间:2014-09-27 22:54:49

标签: ruby mongodb mongoid

有没有办法使用Mongoid通过id查找文档,而不知道它是哪个模型?

2 个答案:

答案 0 :(得分:1)

看看Mongoid是如何在Ruby中使用MongoDB的ODM(Object-Document-Mapper)框架,我不相信这是可能的。了解模型是Mongoid的一个重要组成部分,因此它可以在代码中的对象和MongoDB中数据的文档表示之间进行适当的转换。

如果您有任何疑问,请与我们联系!

答案 1 :(得分:1)

一种可能的解决方法是迭代所有集合,并为所有集合执行find方法。 (它可能会对性能产生影响,具体取决于集合的数量和大小。)

此代码假定集合的命名遵循约定:具有复数形式的小写的模型的名称。

def self.find_with_id_in_all_collections(id)
  all_collections = Mongoid.default_session.collections
  all_models = all_collections.collect{|col| col.name.singularize.camelize}
  all_models.each {|model|
    begin
      found_with_id = eval(model  + ".find(id)")
      return found_with_id
    rescue Mongoid::Errors::DocumentNotFound
     #nothing to do: keep on searching in the other collections
    end
  }
  # if no such ID has been found in any of the collections:
  raise "No document with the ID #{id} found in any of the following collections: #{all_collections}} resp. models: #{all_models}"
end