我正在做一個_id的範圍查詢,並且需要從找到的文檔中僅返回一個特定字段(「數據」)。我想只爲了獲得最佳性能而使此查詢索引。如何在MongoDB中有效地添加帶有_id字段的複合索引
下面是查詢:
db.collection.find({_ ID:{$ GTE: 「C」,$ LTE: 「d」}},{_ ID:0,數據:1} )
此查詢當然並不indexOnly所以我需要添加另一個索引:
db.collection.ensureIndex({_ ID:1,數據:1})
,並告訴MongoDB的使用該指數具有:
db.collection.find({_ ID:{$ GTE: 「C」,$ LTE: 「d」}},{_ ID:0,數據: 1})提示({_ ID:1,數據:1})
(該提示是必要的,因爲否則的MongoDB將使用標準的_id索引進行查詢)
這按預期工作和使查詢indexOnly。但是,即使不再需要它,也不能刪除標準_id索引,這會導致雙倍索引浪費大量空間。在查詢中被迫總是使用hint()也很煩人。
所以我想知道是否有更聰明的方法來做到這一點。
據我所知不。要使用覆蓋索引,所有字段必須在其中。另外,不可能刪除單個_id索引。儘管如此,除非你的數據庫是可怕的,否則_id索引的大小應該是你的問題中最小的。 – joao