Порядок сортировки MongoDB - сочетание восходящих и нисходящих полей - PullRequest
3 голосов
/ 13 декабря 2011

Я хочу отсортировать коллекцию MongoDB по нескольким полям, некоторые по возрастанию, другие по убыванию. Я использую официальный драйвер C #. Мой код в настоящее время выглядит так:

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

Как мне изменить этот код, чтобы он сортировался по убыванию по электронной почте?

Большое спасибо.

1 Ответ

6 голосов
/ 13 декабря 2011

Вы можете связать 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} вместо этого. Слишком много индексов займет место и замедлит вставку / обновление.

...