2011-10-20 32 views
0

如果我有一個大的集合踞(40m +對象),我期待找到:蒙戈複合索引和排序方向

(a : 1 OR b : 2) && c : 3 
sorted by d : 1 

我明白,我會創建一個索引:

{ "a":1, "b":1, "c":1, "d":1 } 

但是,如果我想允許顛倒排序順序,我會需要一個額外的指標:

{ "a":1, "b":1, "c":1, "d":-1 } 

非常感謝。

回答

2

如果您希望按遞增或遞減順序排序結果,則複合索引可能會失敗。請記住,複合索引按字典順序對元組進行排序。沒有理由相信元組總是按照最後一個鍵(d)的順序遞增。

你可以簡單地做到以下幾點:

db.foo.find(...).sort({d:1}); 

db.foo.find(...).sort({d:-1}); 

排序,即使是在大集的元組的速度也相當快。

+0

Mongo只能爲每個查詢使用一個索引。我可能會誤解這個問題,但我不確定創建多個索引來覆蓋該查詢是正確的選擇。 – Marc

+0

是的,MongoDB在索引方面相當有限。 –