-
Type: Task
-
Resolution: Done
-
Priority: Major - P3
-
Affects Version/s: None
-
Component/s: None
-
None
I try the same query in the mongo shell and the explain shows index only:
db.merchants.find({st:{"$regex" : "cr", "$options": "i"}}, {n:1, _id:1}) { "n" : "Crab shack", "_id" : ObjectId("51c908cc1925f3ca51000001") } { "n" : "Tacos R Us", "_id" : ObjectId("51c16f201925f3df4300001b") } db.merchants.find({st:{"$regex" : "cr", "$options": "i"}}, {n:1, _id:1}).explain() { "cursor" : "BtreeCursor st_1_n_1__id_1 multi", "isMultiKey" : false, "n" : 2, "nscannedObjects" : 2, "nscanned" : 2, "nscannedObjectsAllPlans" : 2, "nscannedAllPlans" : 2, "scanAndOrder" : false, "indexOnly" : true, "nYields" : 0, "nChunkSkips" : 0, "millis" : 0, "indexBounds" : { "st" : [ [ "", { } ], [ /cr/i, /cr/i ] ], "n" : [ [ { "$minElement" : 1 }, { "$maxElement" : 1 } ] ], "_id" : [ [ { "$minElement" : 1 }, { "$maxElement" : 1 } ] ] }, "server" : "Arvinds-MacBook-Pro.local:27017" }
But the same query run from the rails console gives me:
Merchant.where({:st => { '$regex'=> "cr", '$options' => 'i' } }).only(:_id, :n).explain
=> {"cursor"=>"BtreeCursor st_1_n_1__id_1 multi", "isMultiKey"=>false, "n"=>2, "nscannedObjects"=>2, "nscanned"=>2, "nscannedObjectsAllPlans"=>2, "nscannedAllPlans"=>2, "sca nAndOrder"=>false, "indexOnly"=>false, "nYields"=>0, "nChunkSkips"=>0, "millis"=>0, "indexBounds"=>{"st"=>[["", {}], [/cr/i, /cr/i]], "n"=>[[{"$minElement"=>1}, {"$maxElemen t"=>1}]], "_id"=>[[{"$minElement"=>1}, {"$maxElement"=>1}]]}, "allPlans"=>[{"cursor"=>"BtreeCursor st_1_n_1__id_1 multi", "n"=>2, "nscannedObjects"=>2, "nscanned"=>2, "index Bounds"=>{"st"=>[["", {}], [/cr/i, /cr/i]], "n"=>[[{"$minElement"=>1}, {"$maxElement"=>1}]], "_id"=>[[{"$minElement"=>1}, {"$maxElement"=>1}]]}}], "oldPlan"=>{"cursor"=>"Btr eeCursor st_1_n_1__id_1 multi", "indexBounds"=>{"st"=>[["", {}], [/cr/i, /cr/i]], "n"=>[[{"$minElement"=>1}, {"$maxElement"=>1}]], "_id"=>[[{"$minElement"=>1}, {"$maxElement "=>1}]]}}, "server"=>"Arvinds-MacBook-Pro.local:27017"}
I suspect this is because of the only() modifier. Or is this a bug?