有没有办法使用Mongoid通过id查找文档,而不知道它是哪个模型?
答案 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