MongoMapper だと Hash で表現するので key そのものにインデックスをはれば Hash 全体に効くのかとおもいきや、違って、明示的に dot notation で指定しないとダメだった。
Single Field Indexes — MongoDB Manual 3.2
https://github.com/kyanny/playground/blob/gh-pages/mongo-index-hash/app.rb
class Foo include MongoMapper::Document key :h, Hash ensure_index 'h.a' end pp Foo.where('h.a' => 1).explain
{"queryPlanner"=> {"plannerVersion"=>1, "namespace"=>"testing.foos", "indexFilterSet"=>false, "parsedQuery"=>{"h.a"=>{"$eq"=>1}}, "winningPlan"=> {"stage"=>"COLLSCAN", "filter"=>{"h.a"=>{"$eq"=>1}}, "direction"=>"forward"}, "rejectedPlans"=>[]}, "executionStats"=> {"executionSuccess"=>true, "nReturned"=>1, "executionTimeMillis"=>0, "totalKeysExamined"=>0, "totalDocsExamined"=>1, "executionStages"=> {"stage"=>"COLLSCAN", "filter"=>{"h.a"=>{"$eq"=>1}}, "nReturned"=>1, "executionTimeMillisEstimate"=>0, "works"=>3, "advanced"=>1, "needTime"=>1, "needYield"=>0, "saveState"=>0, "restoreState"=>0, "isEOF"=>1, "invalidates"=>0, "direction"=>"forward", "docsExamined"=>1}, "allPlansExecution"=>[]}, "serverInfo"=> {"host"=>"NagaeKensuke-no-MacBook-Pro.local", "port"=>27017, "version"=>"3.2.0", "gitVersion"=>"45d947729a0315accb6d4f15a6b06be6d9c19fe7"}} ------------------------ {"queryPlanner"=> {"plannerVersion"=>1, "namespace"=>"testing.foos", "indexFilterSet"=>false, "parsedQuery"=>{"h.a"=>{"$eq"=>1}}, "winningPlan"=> {"stage"=>"COLLSCAN", "filter"=>{"h.a"=>{"$eq"=>1}}, "direction"=>"forward"}, "rejectedPlans"=>[]}, "executionStats"=> {"executionSuccess"=>true, "nReturned"=>1, "executionTimeMillis"=>0, "totalKeysExamined"=>0, "totalDocsExamined"=>1, "executionStages"=> {"stage"=>"COLLSCAN", "filter"=>{"h.a"=>{"$eq"=>1}}, "nReturned"=>1, "executionTimeMillisEstimate"=>0, "works"=>3, "advanced"=>1, "needTime"=>1, "needYield"=>0, "saveState"=>0, "restoreState"=>0, "isEOF"=>1, "invalidates"=>0, "direction"=>"forward", "docsExamined"=>1}, "allPlansExecution"=>[]}, "serverInfo"=> {"host"=>"NagaeKensuke-no-MacBook-Pro.local", "port"=>27017, "version"=>"3.2.0", "gitVersion"=>"45d947729a0315accb6d4f15a6b06be6d9c19fe7"}} ------------------------ {"queryPlanner"=> {"plannerVersion"=>1, "namespace"=>"testing.foos", "indexFilterSet"=>false, "parsedQuery"=>{"h.a"=>{"$eq"=>1}}, "winningPlan"=> {"stage"=>"FETCH", "inputStage"=> {"stage"=>"IXSCAN", "keyPattern"=>{"h.a"=>1}, "indexName"=>"h.a_1", "isMultiKey"=>false, "isUnique"=>false, "isSparse"=>false, "isPartial"=>false, "indexVersion"=>1, "direction"=>"forward", "indexBounds"=>{"h.a"=>["[1, 1]"]}}}, "rejectedPlans"=>[]}, "executionStats"=> {"executionSuccess"=>true, "nReturned"=>1, "executionTimeMillis"=>0, "totalKeysExamined"=>1, "totalDocsExamined"=>1, "executionStages"=> {"stage"=>"FETCH", "nReturned"=>1, "executionTimeMillisEstimate"=>0, "works"=>2, "advanced"=>1, "needTime"=>0, "needYield"=>0, "saveState"=>0, "restoreState"=>0, "isEOF"=>1, "invalidates"=>0, "docsExamined"=>1, "alreadyHasObj"=>0, "inputStage"=> {"stage"=>"IXSCAN", "nReturned"=>1, "executionTimeMillisEstimate"=>0, "works"=>2, "advanced"=>1, "needTime"=>0, "needYield"=>0, "saveState"=>0, "restoreState"=>0, "isEOF"=>1, "invalidates"=>0, "keyPattern"=>{"h.a"=>1}, "indexName"=>"h.a_1", "isMultiKey"=>false, "isUnique"=>false, "isSparse"=>false, "isPartial"=>false, "indexVersion"=>1, "direction"=>"forward", "indexBounds"=>{"h.a"=>["[1, 1]"]}, "keysExamined"=>1, "dupsTested"=>0, "dupsDropped"=>0, "seenInvalidated"=>0}}, "allPlansExecution"=>[]}, "serverInfo"=> {"host"=>"NagaeKensuke-no-MacBook-Pro.local", "port"=>27017, "version"=>"3.2.0", "gitVersion"=>"45d947729a0315accb6d4f15a6b06be6d9c19fe7"}} ------------------------