Mongodb Mongo db奇数$in

Mongodb Mongo db奇数$in,mongodb,Mongodb,我有一个包含30个mongoid的数组,这是我的代码 $rest = $m->cart->res->find(array("_id" => array('$in' => $restin["e"])))->limit(30)->explain(); _id字段是自然索引的,但我得到的结果就像它从未索引过一样,这是我的解释结果 [cursor] => BtreeCursor _id_ multi [isMultiKey] => [n] =&g

我有一个包含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个索引Mongoid,nscanned应该是30个,我如何解决这个问题呢?

这是从

特别是,请注意它谈到的覆盖指数的部分。您的上一个响应是一个覆盖索引(因为您只投影id:1),并且基于他们的文档,在任何情况下看起来都非常正常

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

n扫描

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

,请不受限制地尝试,看看这是否会改变解释计划您非常确定数组只有30个元素?顺便问一下,你的MongoDB版本是什么?它是2.2.2,我再次检查了我的数组有30个,这次我尝试了3个Mongoid,得到了nscanned 5。好的,如果你在shell中执行相同的查询,你会得到什么?另外,请在shell.db.res.find({u id:{$in:[ObjectId(“50ad4a456803fab006000000”)、ObjectId(“509030476803fa0114000000”)、ObjectId(“509030746803faf60a00002”)}、{u id:1})中发布您正在执行的查询