首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于属性快速过滤Mongoid文档的最好方法?

基于属性快速过滤Mongoid文档的最好方法?
EN

Stack Overflow用户
提问于 2011-12-23 09:18:39
回答 2查看 1.3K关注 0票数 0

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

我正在构建一个Rails3应用程序,它将允许用户根据电影的属性来查找电影。我有一个带有index操作的MoviesController,它允许用户根据Movie模型中的属性(如genrestudio等)进行排序。

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

代码语言:javascript
复制
# 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>
...

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

提前感谢您的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-24 02:28:56

在genere和studio上建立索引。

在mongo shell中:

代码语言:javascript
复制
db.movies.ensureIndex({genre: 1})
db.movies.ensureIndex({studio: 1})

如果你想在mongoid中做到这一点,在here上有一些信息。

基本上,在类中:

代码语言:javascript
复制
class Movie
    index :genre
    index :studio
end
票数 1
EN

Stack Overflow用户

发布于 2011-12-23 09:50:04

一行回答:在集合中添加索引可能会加快速度。

长响应:您正在考虑将缓存添加到应用程序中,因为数据库感觉很慢,而且您可能知道,如果您使用的是关系引擎,那么这些东西就没问题了。您应该开发您的应用程序,而不是担心如何缓存内容:)

您的应用程序中是否存在阻止您使用传统关系引擎的因素?如果有,那就继续,使用索引,也许这会解决它。如果不是,为什么选择Mongo呢?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8611320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档