Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用Rails和Mongoid在Heroku上索引MongoDB_Ruby On Rails_Ruby On Rails 3_Mongodb_Indexing_Mongoid - Fatal编程技术网

Ruby on rails 使用Rails和Mongoid在Heroku上索引MongoDB

Ruby on rails 使用Rails和Mongoid在Heroku上索引MongoDB,ruby-on-rails,ruby-on-rails-3,mongodb,indexing,mongoid,Ruby On Rails,Ruby On Rails 3,Mongodb,Indexing,Mongoid,我有一个在Heroku上运行Mongoid的Rails应用程序,我需要设置一些索引以加快数据库的速度。我在很多地方读过这方面的文章,我知道Mongoid有一些内置的索引功能,但我不确定应用它们的方式以及索引的频率 我想索引的主要是我的设计模型: scope :full_member_and_show, where(full_member: true).and(show: true).desc(:created_at) scope :not_full_member_and_show, where(

我有一个在Heroku上运行Mongoid的Rails应用程序,我需要设置一些索引以加快数据库的速度。我在很多地方读过这方面的文章,我知道Mongoid有一些内置的索引功能,但我不确定应用它们的方式以及索引的频率

我想索引的主要是我的设计模型:

scope :full_member_and_show, where(full_member: true).and(show: true).desc(:created_at)
scope :not_full_member_and_show, where(full_member: false).and(show: true).desc(:created_at)

embeds_many :comments
belongs_to :designer

search_in :tags_array

attr_accessible :image,  :tags, :description, :title, :featured, :project_number, :show



field :width
field :height
field :description
field :title
field :tags, type: Array
field :featured, :type => Boolean, :default => false
field :project_number, :type => Integer, :default => 0
field :show, :type => Boolean, :default => true
field :full_member, :type => Boolean, :default => false
field :first_design, :type => Boolean, :default => false
我需要索引什么,如何使用Mongoid进行索引,以及应该多久索引一次

错误更新

如果尝试索引以下内容:

index({ full_member: 1, show: 1 }, { unique: true })
这给我带来了一个错误:

Invalid index specification {:full_member=>1, :show=>1}; should be either a string, symbol, or an array of arrays.

您不需要定期编制索引:添加索引后,mongo会随着集合的更改使该索引保持最新。这与MySQL或Postgres中的索引相同(您可能已经想到了类似solr的东西)

索引内容取决于您将对数据集进行的查询。当您进行更新和占用磁盘空间时,索引确实会带来一些开销,因此您不想在不需要索引时添加索引

例如,您可以通过索引告诉mongoid您想要什么索引

class Person
  include Mongoid::Document
  index :city
end
mongoid文档中有大量示例,介绍mongo支持的各种索引

然后你就跑

rake db:mongoid:create_indexes
这将确定您想要的索引(基于对模型中的
index
的调用),然后确保它们存在于数据库中,并在必要时创建它们。在开发中,您会在向模型添加索引后运行此操作。在生产环境中,将此作为部署的一部分运行是有意义的(如果自上次部署以来添加了索引,则只需要这样做,但系统化地执行更容易)


有很多关于mongo如何使用索引的信息,这是一个很好的答案。这正是我想要的。谢谢我这样做是为了让我的数据库更快,所以我应该只对我查询的每个字段建立一个索引吗?这是最好的做法吗?Mongo只使用一个索引来执行一个查询,因此,如果查询引用了3个字段,则不会使用3个单独的索引。但是,它可能能够使用复合索引。还有某些类型的查询(例如regex查询)不能使用索引。mongo文档中有大量关于mongo如何使用indexesOk的信息。那么,为我们查询的第一件事编制索引是否最好?在这种情况下-where(full_member:true)?在这种情况下,最好在[:full_member,:show,:created_at]上使用一个复合索引,因为您的作用域使用这三个。非常酷。我现在就接受你的回答。在哪里可以阅读更多关于mongoid中复合索引的信息?