ruby - 是否可以指定查询应在 Mongoid 中使用的索引?

标签 ruby mongodb mongoid

当一个索引是另一个索引的子集时,MongoDB 似乎使用了一种低效的查询模式。

class Model
  field :status, :type => Integer
  field :title, :type => String
  field :subtitle, :type => String
  field :rating, :type => Float

  index([
    [:status, Mongo::ASCENDING],
    [:title, Mongo::ASCENDING],
    [:subtitle, Mongo::ASCENDING],
    [:rating, Mongo::DESCENDING]
  ])
  index([
    [:status, Mongo::ASCENDING],
    [:title, Mongo::ASCENDING],
    [:rating, Mongo::DESCENDING]
  ])
end

在查询 statustitlesubtitle 以及在 rating 上排序时都使用第一个索引当只查询 statustitle 并在 rating 上排序时,即使使用 explain() >hint() 在 javascript 控制台中指出使用第二个索引的速度快 4 倍。

如何告诉 Mongoid 告诉 MongoDB 使用第二个索引?

最佳答案

您可以使用 Mongoid::Criterion::Optional.extras

将提示等选项传递给 Mongo::Collection

一个例子:

criteria = Model.where(:status => true, :title => 'hello world').desc(:rating)
criteria.extras(:hint => {:status => 1, :title => 1, :rating => -1})

extras 接受 Mongo::Collection 的任何内容可以处理

关于ruby - 是否可以指定查询应在 Mongoid 中使用的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4558320/

相关文章:

ruby-on-rails - 安装和使用 acts-as-taggable-on

ruby-on-rails - 了解 Ruby 语法

java - 从 GridFS 读取时不显示非 ASCII 字符

ruby-on-rails - Mongoid 和查询嵌入式位置?

mysql - 使用内连接表进行高级搜索

mysql - 如何从 rake 任务运行 MySQL 查询?

java - 自动配置数据源失败 : 'spring.datasource.url' is not specified

node.js - 在 Node 中返回大量数据的良好实践

ruby-on-rails - 在 mongoid 关系上批量插入文档

ruby-on-rails - 无法让 mongoid 与 Rails 4 一起工作