ruby - 是否可以指定查询应在 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 的任何内容可以处理

https://stackoverflow.com/questions/4558320/

相关文章:

MongoDB - 我可以使用 ObjectId 作为键吗?

javascript - UnhandledPromiseRejectionWarning 错误 :

mongodb - Java MongoDB 驱动连接问题

mongodb - 要将一条记录与 MongoDB 中的另一条记录相关联,可以使用 slug 吗?

node.js - 如何在没有回调的情况下返回 Mongoose 查询结果

mongodb - .NET 是否有与数据库无关的 nosql 框架?

node.js - 使用 winston-mongodb 和 express-winston 进行日

javascript - 获取集合和子文档中所有键的名称

mongodb - 使用 mongodb 聚合的多个字段的不同计数

java - Mongo 将 Document 转换为 DBObject