2012-12-21 142 views
1

在$奇怪我有一個包含30 mongoid一個數組,這是我的代碼,蒙戈DB在

$rest = $m->cart->res->find(array("_id" => array('$in' => $restin["e"])))->limit(30)->explain(); 

_id場自然是索引,但我得到的結果就像它從來沒有索引,這是我的解釋結果,

[cursor] => BtreeCursor _id_ multi 
[isMultiKey] => 
[n] => 30 
[nscannedObjects] => 30 
[nscanned] => 43 
[nscannedObjectsAllPlans] => 30 
[nscannedAllPlans] => 43 
[scanAndOrder] => 
[indexOnly] => 
[nYields] => 0 
[nChunkSkips] => 0 
[millis] => 0 
[indexBounds] => Array 

我不明白的部分是,爲什麼MongoDB的搜索43個文件?,只有30索引mongoids,nscanned應該是30,我怎麼能解決這個問題?

+0

嘗試沒有限制,看看是否改變解釋計劃 – muruga

+0

仍然沒有改變 – user1794257

+0

你很確定你的數組只有30個元素?順便說一下,你的MongoDB版本是什麼? – muruga

回答

3

這裏是Mongo DB Explain Plan

文檔excerupt特別是,要注意的地方談論覆蓋索引部分。你最後的迴應是一個被覆蓋的索引(因爲你僅僅預測了id:1),並且根據他們的文檔,在任何情況下都是非常正常的。

nscannedObjects
指定在查詢期間掃描的文檔總數。 nscannedObjects可能低於nscanned,例如索引是覆蓋索引。

nscanned
指定的數據庫操作期間掃描的文檔或索引條目的總數。你希望n和nscanned在儘可能接近的價值。已掃描的值可能高於nscannedObjects值,例如,如果索引是覆蓋索引

+0

謝謝你的回答 – user1794257

+0

@ user1794257你非常歡迎,希望這可以幫助你 – muruga