Я пытаюсь выяснить, как отсортировать коллекцию документов на стороне сервера, сообщив драйверу С#, что такое порядок сортировки, но он, похоже, еще не поддерживает эту конструкцию.
Можно ли сделать это любым другим способом?
Я пытаюсь выяснить, как отсортировать коллекцию документов на стороне сервера, сообщив драйверу С#, что такое порядок сортировки, но он, похоже, еще не поддерживает эту конструкцию.
Можно ли сделать это любым другим способом?
Вы также можете сделать это, используя метод SetSortOrder в классе MongoCursor:
db["collection"].Find().SetSortOrder(SortBy.Ascending("SortByMe"));
Обратите внимание, что для сортировки по нескольким полям используйте это:
db["collection"].Find().SetSortOrder(SortBy.Ascending("SortByMe").Descending("AndByMe");
Чтобы добавить к Крису ответ, в С# 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
Если вы хотите использовать 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);
Не забудьте указать индекс в поле, которое вы сортируете:]
Кажется, способ сделать это с использованием существующего драйвера С# выглядит следующим образом:
db["collection"].Find(new Document().Append("query",
new Document()).Append("orderby",
new Document().Append(name:1).Append(age,-1)));
Что я включил Sam Corder здесь
Для асинхронных методов:
var filter = Builders<BsonDocument>.Filter.Empty;
var sort = Builders<BsonDocument>.Sort.Ascending("time");
collection.FindAsync(filter, new FindOptions<BsonDocument, BsonDocument>()
{
Sort = sort
});
Я делаю это в JavaScript, так как я не знаю С#, но он должен иметь эквивалентный синтаксис с драйвером С#.
Если ваш запрос выглядел так:
db.c.find({"foo" : "bar"})
и вы хотите сортировать по "baz" по возрастанию, оберните свой запрос в поле "запрос" и добавьте поле "orderby":
db.c.find({"query" : {"foo" : "bar"}, "orderby" : {"baz" : 1}})
Для сортировки по убыванию используйте -1.