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



我是Rails和Mongoid的新手,所以如果这个问题的答案应该是显而易见的,那么我很抱歉。:)

我正在构建一个Rails 3应用程序,允许用户根据电影的属性查找电影。我有一个具有index动作的MoviesController,允许用户根据Movie模型中的属性(如genre, studio等)进行排序。

我已经提出了以下解决方案,但这感觉不太可持续,因为它已经开始随着我的数据库的增长而变慢。

# 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>
...

我已经探索了动作和片段缓存来加快速度,但我必须认为有更好的方法来做到这一点。

提前感谢您的帮助!

制作电影和工作室索引

在mongo shell:

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

如果你想在monid中做这个,这里有一些相关的信息。

基本上在类中:

class Movie
    index :genre
    index :studio
end

一行回应:为集合添加索引可能会加快速度。

长回复:你正在考虑在应用程序中添加缓存,因为DB感觉很慢,你可能知道如果你使用的是关系引擎,那么这些东西就会很好。你应该开发你的应用程序,而不是担心如何缓存内容:)

在您的应用程序中是否有任何东西阻止您使用传统的关系引擎?如果有的话,继续,使用索引,也许会修复它。如果不是,为什么选择蒙古?

最新更新