Подтвердить что ты не робот

Как указать порядок или сортировку с помощью драйвера С# для MongoDB?

Я пытаюсь выяснить, как отсортировать коллекцию документов на стороне сервера, сообщив драйверу С#, что такое порядок сортировки, но он, похоже, еще не поддерживает эту конструкцию.

Можно ли сделать это любым другим способом?

4b9b3361

Ответ 1

Вы также можете сделать это, используя метод SetSortOrder в классе MongoCursor:

db["collection"].Find().SetSortOrder(SortBy.Ascending("SortByMe"));

Ответ 2

Обратите внимание, что для сортировки по нескольким полям используйте это:

db["collection"].Find().SetSortOrder(SortBy.Ascending("SortByMe").Descending("An‌​dByMe");

Ответ 3

Чтобы добавить к Крису ответ, в С# Driver 2.x теперь выполняется с SortBy, SortByDescending, ThenBy и ThenByDescending

collection.Find(bson => true).SortBy(bson => bson["SortByMeAscending"]).ThenByDescending(bson => bson["ThenByMeDescending"]).ToListAsync()

Теперь он еще больше похож на Linq.

http://mongodb.github.io/mongo-csharp-driver/2.0/reference/driver/crud/reading/#sort

Ответ 4

Если вы хотите использовать linq:

Из документации: (http://docs.mongodb.org/ecosystem/tutorial/use-linq-queries-with-csharp-driver/)

var query=
    (from c in collection.AsQueryable<C>()
    orderby c.X
    select c)

foreach (var d in query)
{
    // process your documents
}

Если вы хотите, вы также можете ограничить результаты:

var query=
    (from c in collection.AsQueryable<C>()
    orderby c.X descending
    select c).Take(1);

Не забудьте указать индекс в поле, которое вы сортируете:]

Ответ 5

Кажется, способ сделать это с использованием существующего драйвера С# выглядит следующим образом:

db["collection"].Find(new Document().Append("query", 
new Document()).Append("orderby", 
new Document().Append(name:1).Append(age,-1))); 

Что я включил Sam Corder здесь

Ответ 6

Для асинхронных методов:

var filter = Builders<BsonDocument>.Filter.Empty;
var sort = Builders<BsonDocument>.Sort.Ascending("time");
collection.FindAsync(filter, new FindOptions<BsonDocument, BsonDocument>()
{
    Sort = sort
});

Ответ 7

Я делаю это в JavaScript, так как я не знаю С#, но он должен иметь эквивалентный синтаксис с драйвером С#.

Если ваш запрос выглядел так:

db.c.find({"foo" : "bar"})

и вы хотите сортировать по "baz" по возрастанию, оберните свой запрос в поле "запрос" и добавьте поле "orderby":

db.c.find({"query" : {"foo" : "bar"}, "orderby" : {"baz" : 1}})

Для сортировки по убыванию используйте -1. ​​