2014-12-24 51 views
0

我已經開始在Mongo中尋找合適的索引,但有一件事我有點困惑。Mongo索引在一個值上搜索時,在另一個值上排序

如果我想在一個字段(級別)上搜索並在另一個(隨機)上排序,我該如何設置該索引?哪個領域最先?

注意:以上,隨機,我的意思是我有一個叫做隨機的字段。我沒有對隨機選擇的字段進行排序。

回答

1

在mongodb中的「隨機」字段排序不是一個好主意。如果sort沒有被索引,那麼排序將在內存中完成,這對大型結果集是一個問題。

索引可以支持對索引關鍵字模式的非前綴子集進行排序操作。爲此,查詢必須在排序鍵之前的所有前綴鍵中包含相等條件。所以,如果你的指數爲{A:1,B:1},你可以有這樣的

db.data.find查詢({A: 「富」})的.sort({B:1})

Mongobd文檔解釋得好:http://docs.mongodb.org/manual/tutorial/sort-results-with-indexes/

編輯:根據更新的問題你的指數應{級別:1,隨機:1}

+0

很抱歉的混亂。我有一個叫隨機的字段,它有一個隨機值,以創建一個隨機排序。我會在OP中澄清。但謝謝你的答案。基本上,總是從最大集到最小索引? – RhoVisions

+0

在這種情況下,您的索引應該是{level:1,random:1},但要確保您的查詢在級別上包含相等性。爲了排序使用索引,「排序」之前的部分必須包含在查詢中。因此,如果您有索引{a:1,b:1,c:1},查詢db.data.find(a:「foo」,b:「bar」)。sort({c:1})和db。 data.find(a:「foo」)。sort({b:1})將使用索引,但查詢db.data.find(a:「foo」)。sort({c:1})不會使用索引並將不得不在內存中排序。 – Gennadiy