0
我有一個測試數據庫錯誤與字段_id,姓名,年齡,日期爲什麼indexOnly屬性對此覆蓋查詢
指標:
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "blogger.users"
},
{
"v" : 1,
"key" : {
"name" : 1,
"age" : 1
},
"name" : "name_1_age_1",
"ns" : "blogger.users"
},
{
"v" : 1,
"key" : {
"age" : 1,
"name" : 1
},
"name" : "age_1_name_1",
"ns" : "blogger.users"
}
]
當運行下面的查詢:
> db.users.find({"name":"user10"},{"_id":0,"date":0})
.explain()
我得到以下:
{
"cursor" : "BtreeCursor name_1_age_1",
"isMultiKey" : false,
"n" : 1,
"nscannedObjects" : 1,
"nscanned" : 1,
"nscannedObjectsAllPlans" : 2,
"nscannedAllPlans" : 2,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"indexBounds" : {
"name" : [
[
"user10",
"user10"
]
],
"age" : [
[
{
"$minElement" : 1
},
{
"$maxElement" : 1
}
]
]
},
"server" : "Johny-PC:27017",
"filterSet" : false
}
沒有解釋的結果是:
{ "name" : "user10", "age" : 68 }
即使這是適當的預測一個覆蓋查詢時,indexOnly
領域仍然是假的。我也嘗試使用提示明確提供索引,但沒有改變。在這種情況下,nscannedObjectsAllPlans
和nscannedAllPlans
的值爲1,因爲查詢不嘗試其他索引。
另外,我已經添加了_id:0的投影。我想這就夠了? – 757071 2014-09-03 05:44:04
@johny不,它不會。您可以隨時「排除」_id,但不能混合和匹配其他字段。這意味着你可以明確包含或排除。不是都。所以'_id'是這裏唯一的例外 – 2014-09-03 05:44:52
現實情況是我實際上排除了一個問題的字段(日期),我認爲這個字段是不相關的。因此,如果我必須排除該鍵,則會顯示此錯誤。 – 757071 2014-09-03 05:49:01