我有一个集合,其中文档具有唯一的附加索引,称为index
。我只想在执行某些搜索查询时使用此索引,因此我将其作为参数传递给hint
。不幸的是,在explain
收到的解释中,我可以看到实际上在下面的例子中扫描了5个对象,而我期望这些数字为3.以下是简单查找查询的解释输出:< / p>
> db.collection.find({"index": {$in : [1, 4, 9]}}).hint({"index": 1}).explain();
{
"cursor" : "BtreeCursor index_1",
"isMultiKey" : false,
"n" : 3,
"nscannedObjects" : 3,
"nscanned" : 5,
"nscannedObjectsAllPlans" : 3,
"nscannedAllPlans" : 5,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"indexBounds" : {
"index" : [
[
1,
1
],
[
4,
4
],
[
9,
9
]
]
},
"server" : "hostname.local:27017",
"filterSet" : false
}
>
那么,有没有办法实现我想要的?这不是我期待的行为。在另一个相关的说明中,我可以创建一个查询计划,然后强制使用该查询计划,以便解释中的filterSet
为true
(因此,而不是5个文档只会搜索3个)?当然,如果有这样的方式,我会有兴趣知道如何实现这一目标。
我还在帖子中添加了mongoose
标记,因为最终我有兴趣通过mongoose发出此类查询。
答案 0 :(得分:3)
使用索引时(如本例所示),nscanned
是扫描的索引条目的数量,而不是文档。 nscannedObjects
是扫描的文档数量,而且是3,所以事情似乎按预期工作。