我有一个简单的集合customers ,如下所示
db.customers.find().pretty()
{
"_id" : ObjectId("524eb09ca71b72672e65ebb6"),
"name" : "kiran",
"occupation" : "SelfEmployeed",
"country" : "IND"
}
{
"_id" : ObjectId("524eb0a4a71b72672e65ebb7"),
"name" : "Mark",
"occupation" : "Architect",
"country" : "US"
}
{
"_id" : ObjectId("524eb0aba71b72672e65ebb8"),
"name" : "beast",
"occupation" : "housewife",
"country" : "UK"
}
{
"_id" : ObjectId("524eb0b2a71b72672e65ebb9"),
"name" : "Philip",
"occupation" : "Engineer",
"country" : "SWE"
}
Run Code Online (Sandbox Code Playgroud)
我已经在名称和国家/地区字段上创建了索引,如下所示
db.customers.ensureIndex({name : 1}, {"unique" : false})
db.customers.ensureIndex({country : 1}, {"unique" : false})
Run Code Online (Sandbox Code Playgroud)
索引已创建
db.customers.getIndexKeys()
Run Code Online (Sandbox Code Playgroud)
[{"_ id":1},{"name":1},{"country":1}]
这是我的查询解释的结果
db.customers.find({name : "Mark"}).explain()
{
"cursor" : "BtreeCursor name_1",
"isMultiKey" : false,
"n" : 1,
"nscannedObjects" : 1,
"nscanned" : 1,
"nscannedObjectsAllPlans" : 1,
"nscannedAllPlans" : 1,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"indexBounds" : {
"name" : [
[
"Mark",
"Mark"
]
]
},
"server" : "************"
}
Run Code Online (Sandbox Code Playgroud)
为什么indexonly属性值是false?
我见过类似的问题,这个问题解释了它的原因
indexonly是false,因为它不会仅使用索引,因为您将通过该查询检索未编制索引的其他字段.
请让我知道其他领域在这里意味着什么?
有些搜索实际上会让你在前一段时间回答这个问题.
原因是这样的:
db.customers.find({name : "Mark"}).explain()
Run Code Online (Sandbox Code Playgroud)
没有预测,在这种情况下,MongoDB如何知道索引覆盖了返回而不查看实际文档?
它类似于
SELECT * from customers
Run Code Online (Sandbox Code Playgroud)
和
SELECT d from customers
Run Code Online (Sandbox Code Playgroud)
你怎么能知道*是d不看?
| 归档时间: |
|
| 查看次数: |
2079 次 |
| 最近记录: |