2011-12-13 10 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는 쿼리에 대해 하나의 인덱스 만 사용하므로 인덱스가 잘 맞아야합니다.

예 : 화합물 인덱스 {C, A, B} 경우 find({A: "foo", B: "bar"}).sort("C" : -1);

이 효율적으로 인덱싱을 사용하지 않을 것이다. 대신 {A, B, C}이어야합니다. 너무 많은 인덱스는 공간을 차지하고 삽입/업데이트를 느리게 만듭니다.

관련 문제