1

我有一个包含 30 个 mongoid 的数组,这是我的代码,

$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,我该如何解决这个问题?

4

1 回答 1

3

这是Mongo DB Explain Plan中的文档

特别要注意它谈论COVERED INDEX的部分。您的最后一个回复是一个覆盖索引(因为您只投影 id: 1),根据他们的文档,无论如何它看起来都很正常。

nscannedObjects
指定查询期间扫描的文档总数。nscannedObjects 可能低于 nscanned,例如如果索引是覆盖索引。

nscanned
指定在数据库操作期间扫描的文档或索引条目的总数。您希望 n 和 nscanned 的值尽可能接近。nscanned 值可能高于 nscannedObjects 值,例如如果索引是覆盖索引

于 2012-12-21T19:18:10.133 回答