57

我试图通过告诉 C# 驱动程序排序顺序是什么来弄清楚如何对服务器端的文档集合进行排序,但它似乎还不支持该构造。

是否有可能以其他方式做到这一点?

4

10 回答 10

81

您也可以使用 MongoCursor 类上的 SetSortOrder 方法:

db["collection"].Find().SetSortOrder(SortBy.Ascending("SortByMe"));
于 2011-04-23T14:51:15.477 回答
30

只是为了补充克里斯的答案,在 C# 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

于 2015-08-13T13:54:29.173 回答
24

对于异步方法:

var filter = Builders<BsonDocument>.Filter.Empty;
var sort = Builders<BsonDocument>.Sort.Ascending("time");
collection.FindAsync(filter, new FindOptions<BsonDocument, BsonDocument>()
{
    Sort = sort
});
于 2017-08-17T13:26:32.777 回答
21

MongoDB.Driver 2.5.0中api的简单使用

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();
于 2018-01-21T14:48:58.343 回答
9

请注意,要对多个字段进行排序,请使用以下命令:

db["collection"].Find().SetSortOrder(SortBy.Ascending("SortByMe").Descending("An‌​dByMe");
于 2013-06-16T11:07:02.740 回答
8

如果你想使用 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);

请记住在您排序的字段上有一个索引:]

于 2014-12-15T13:59:24.810 回答
5

使用现有 C# 驱动程序的方法似乎如下:

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

山姆·科德(Sam Corder)在这里开启了我

于 2010-01-27T16:18:13.377 回答
1

@DmitryZyr 对 FindAsync 的回答不起作用。然而,这个做到了。

var sortDefinition = new SortDefinitionBuilder<ImmutableLog>().Descending("date");
var findOptions = new FindOptions<ImmutableLog>() {Sort = sortDefinition};
await this.Collection.FindAsync(new BsonDocument(), findOptions);
于 2020-04-16T17:27:32.163 回答
1

我目前正在使用 API 版本 MongoDB.Driver 2.8.1。如果需要,这是我调用以返回具有降序排序的对象列表的方法:

public static IEnumerable<TEntity> GetDocumentsForCollection(
        IMongoDatabase database,
        string collectionName,
        FilterDefinition<TEntity> query,
        string databaseCollectionKeyToSortOnDescending)
    {
        var _mongoSettings = new MongoCollectionSettings();
        _mongoSettings.GuidRepresentation = GuidRepresentation.Standard;
        var _collection = database.GetCollection<TEntity>(collectionName, _mongoSettings);

        if (string.IsNullOrEmpty(databaseCollectionKeyToSortOnDescending))
        {
            return _collection.Find(query).ToList();
        }

        return _collection.Find<TEntity>(query).Sort(Builders<TEntity>.Sort.Descending(databaseCollectionKeyToSortOnDescending)).ToList();
    }
于 2020-11-04T11:55:18.783 回答
-1

因为我不懂 C#,所以我在 JavaScript 中执行此操作,但它应该具有与 C# 驱动程序等效的语法。

如果您的查询如下所示:

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

并且您想按“baz”升序排序,将查询包装在“query”字段中并添加“orderby”字段:

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

对于降序排序,使用 -1。

于 2010-01-23T17:07:44.447 回答