Как указать порядок или сортировку с помощью драйвера C # для MongoDB? - PullRequest
37 голосов
/ 23 января 2010

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

Возможно ли это сделать другим способом?

Ответы [ 8 ]

68 голосов
/ 23 апреля 2011

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

db["collection"].Find().SetSortOrder(SortBy.Ascending("SortByMe"));
12 голосов
/ 13 августа 2015

Просто чтобы добавить ответ Криса, в C # Driver 2.x теперь это делается с SortBy, SortByDescending, ThenBy & ThenByDescending

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

Теперь это напоминает Линка еще больше.

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

8 голосов
/ 17 августа 2017

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

var filter = Builders<BsonDocument>.Filter.Empty;
var sort = Builders<BsonDocument>.Sort.Ascending("time");
collection.FindAsync(filter, new FindOptions<BsonDocument, BsonDocument>()
{
    Sort = sort
});
8 голосов
/ 16 июня 2013

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

db["collection"].Find().SetSortOrder(SortBy.Ascending("SortByMe").Descending("An‌​dByMe");
6 голосов
/ 15 декабря 2014

Если вы хотите использовать 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 голосов
/ 27 января 2010

Кажется, что способ сделать это с помощью существующего драйвера C # заключается в следующем:

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

Который был включен Сэмом Кордером здесь

2 голосов
/ 21 января 2018

Простое использование API в MongoDB.Driver 2.5.0

var client = new MongoClient("mongodb://localhost:27017");

var database = client.GetDatabase("Blog");

var list = database.GetCollection<BlogPost>("BlogPost")
    .Find(e => e.Deleted == false)
    .SortByDescending(e => e.CreatedOn)
    .Limit(20)
    .ToList();
0 голосов
/ 23 января 2010

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

Если ваш запрос выглядел следующим образом:

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

и вы хотите отсортировать по возрастанию «baz», обернуть запрос в поле «query» и добавить поле «orderby»:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...