蒙古奇怪在$ in

时间:2012-12-21 18:33:52

标签: mongodb

我有一个包含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,我该如何解决?

1 个答案:

答案 0 :(得分:3)

以下是来自Mongo DB Explain Plan

的文档

特别注意它所涉及的部分 COVERED INDEX 。您的上一个响应是一个覆盖索引(因为您只预测id:1),并且它在任何情况下都基于他们的文档看起来很正常。

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

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