2011-12-13 73 views
3

我想根據幾個字段對一個MongoDB集合進行排序,一些升序,另一些降序。 我正在使用官方的C#驅動程序。我的代碼目前看起來是這樣的:MongoDB排序順序 - 上升和下降字段的組合

string[] sortFields = new[] { "surname", "firstname","companyname","email" }; 
MongoDB.Driver.Builders.SortByBuilder sort = MongoDB.Driver.Builders.SortBy.Ascending(sortFields); 
foreach (MongoDB.Bson.BsonDocument doc in contactsCollection.FindAs<MongoDB.Bson.BsonDocument>(query).SetSortOrder(sort)) 
{ 
... 

如何改變這種代碼,以便它排序上降的電子郵件?

非常感謝。

回答

6

你可以連續通話SortBy

var sort = SortBy.Ascending("surname").Descending("email"); 
foreach (var doc in contactsCollection.FindAs<MongoDB.Bson.BsonDocument>(query).SetSortOrder(sort)) 
{ 
    ... 

我會小心動態建立查詢,特別是許多鍵。請記住,MongoDB只使用一個索引進行查詢,因此您的索引必須非常適合。

實施例:find({A: "foo", B: "bar"}).sort("C" : -1);

這將不能有效地,如果化合物指數{C, A, B}使用索引。相反,它必須是{A, B, C}。索引太多會佔用空間並使插入/更新速度變慢。