快速过滤基于属性的Mongoid文档的最佳方式?

问题描述:

我是一个Rails和Mongoid的相对新手,所以如果对这个问题的答案应该是显而易见的,请大家道歉。 :)快速过滤基于属性的Mongoid文档的最佳方式?

我建立一个Rails应用程序3,将允许用户找到基于对电影的属性电影。我有一个MoviesControllerindex的行动,允许用户基于Movie模型的属性(如genrestudio等)进行排序。

我已经想出了以下解决方案,但这并不感到可持续的,因为它是已经开始为我的数据库已经成长放缓。

# controllers/movies_controller.rb 

def index 
    if params[:genre] 
    @movies = Movie.where(:genre => params[:genre]) 
    elsif params[:studio] 
    @movies = Movie.where(:studio => params[:studio]) 
    else 
    @movies = Movie.all 
    end 
end 

# views/movies/index.html.erb 

<li><%= link_to "Action", movies_path(:genre => "Action") %></li> 
<li><%= link_to "Suspense", movies_path(:genre => "Suspense") %></li> 
<li><%= link_to "Drama", movies_path(:genre => "Drama") %></li> 
... 

<li><%= link_to "Paramount", movies_path(:studio => "Paramount") %></li> 
<li><%= link_to "Universal", movies_path(:studio => "Universal") %></li> 
<li><%= link_to "Disney", movies_path(:studio => "Disney") %></li> 
... 

我已经探索行动和片段缓存来加快速度,但我想有一个更好的方式来做到这一点。

在此先感谢您的帮助!

在genere和studio上制作索引。

在蒙戈外壳:

db.movies.ensureIndex({genre: 1}) 
db.movies.ensureIndex({studio: 1}) 

如果你想要做这里面mongoid有对here一些信息。

基本上,内部类:

class Movie 
    index :genre 
    index :studio 
end 

一行响应:向您的集合添加索引可能会加快速度。

朗回应:你想添加缓存到应用程序,因为DB感觉慢的,你可能知道,如果你使用的是关系引擎,然后这些东西就可以了。你应该开发应用程序,而不是担心如何缓存的东西:)

有什么在你的应用程序阻止您使用传统的关系型引擎?如果有,请继续,使用索引,也许这将解决它。如果没有,为什么要去Mongo?

+0

感谢费德里科,我会看看我的索引策略,看看是否能加快东西。我原来选择了MongoDB,所以我不必担心迁移问题,因为我也在我的应用中对电视节目进行建模,并且发现在我的“显示”文档中嵌入“Episode”对象效率更高。 – 2011-12-23 02:17:39