0
我有一個將日期範圍嵌入文檔的項目。嵌套查詢日期範圍
類似以下內容:
{ "availabilities" : [
{ "start_date" : ISODate("2012-06-28T00:00:00Z"), "end_date" : ISODate("2012-10-03T00:00:00Z") },
{ "start_date" : ISODate("2012-10-08T00:00:00Z"), "end_date" : ISODate("2012-10-28T00:00:00Z") }]
}
我需要做的是找到所有在一定時間內 可我用這樣一個查詢的文件是什麼:
db.faces.find({"availabilities" : {"$elemMatch" : {"$and" : [{"start_date" : {"$lte" : ISODate('2012-10-01 00:00:00 UTC')}}, {"end_date" : {"$gte": ISODate('2012-10-07 00:00:00 UTC')}}]}}})
但它不會使用我的索引:
{
"v" : 1,
"key" : {
"availabilities.start_date" : 1,
"availabilities.end_date" : 1
},
"ns" : "faces_development.faces",
"name" : "availabilities.start_date_1_availabilities.end_date_1"
}
當我對查詢進行解釋時,t他爲indexBounds輸出很奇怪,我不明白。
{
"cursor" : "BtreeCursor availabilities.start_date_1_availabilities.end_date_1",
"isMultiKey" : true,
"n" : 71725,
"nscannedObjects" : 143019,
"nscanned" : 143019,
"nscannedObjectsAllPlans" : 143221,
"nscannedAllPlans" : 143221,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 2,
"nChunkSkips" : 0,
"millis" : 1608,
"indexBounds" : {
"availabilities.start_date" : [
[
true,
ISODate("2012-10-01T00:00:00Z")
]
],
"availabilities.end_date" : [
[
{
"$minElement" : 1
},
{
"$maxElement" : 1
}
]
]
},
"server" : "foobar.local:27017"
}
當前版本的MongoDB:MongoDB的外殼版本:2.2.0
我該怎麼辦呢使用索引?
試圖找到MongoDB上的相關問題和錯誤,但沒有取得很大的成功。
我不知道這個indexBounds是什麼意思,但是「cursor:'BtreeCursor'」表示它正在使用索引。 – hlidotbe
嗯你的索引界限之一有「真」值?你可能會發現你的數據不乾淨。確實是使用索引,但由於某種原因,索引造成了比它應該掃描的更寬的掃描,因爲它正在掃描143019,但它只返回71725.它可能是在elemmatch中使用$ gt和$ lt,不潔的數據 – Sammaye