2011-12-13 6 views
3

Je souhaite trier une collection MongoDB en fonction de plusieurs champs, certains ascendants et d'autres descendants. J'utilise le pilote C# officiel. Mon code ressemble à ceci:Ordre de tri MongoDB - mélange de champs ascendant et descendant

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)) 
{ 
... 

Comment puis-je modifier ce code afin de le trier par ordre décroissant pour le courrier électronique?

Merci beaucoup.

Répondre

6

Vous pouvez enchaîner les appels SortBy:

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

Je ferais attention sur les requêtes de construction de manière dynamique, en particulier avec autant de clés. Gardez à l'esprit que MongoDB n'utilise qu'un seul index pour une requête, votre index doit donc être adapté.

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

Cela n'utiliser l'indexation efficace si l'indice composé est {C, A, B}. Ce doit être {A, B, C} à la place. Trop d'index prendront de la place et rendront les insertions/mises à jour plus lentes.

Questions connexes