你说得对。MongoDB仍然使用索引,即使在搜索中使用其他字段。你可以用
db.things.explain().find({foo: 'something', bar: 'else'})
.
你会得到这样的结果:
"winningPlan" : {
"stage" : "FETCH",
"filter" : {
"bar" : {
"$eq" : "else"
}
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"foo" : 1
},
"indexName" : "foo_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"foo" : [ ]
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"foo" : [
"[\"something\", \"something\"]"
]
}
}
这个列表显示了mongoDB是如何进行搜索的(从下到上)。“IXSCAN”的第一阶段显示mongoDB首先使用索引,然后尝试使用“FETCH”执行其余的搜索