如何在Mongo驱动程序中为"orderby"编写查询以进行排序?

har*_*har 8 c# mongodb mongodb-.net-driver

我正在尝试使用MongoDB的C#驱动程序从MongoDB中的"Deal"集合中检索最近的五个文档.我可以用下面的代码来做.

public IList<TEntity> GetRecentFive()
{
    IList<TEntity> entities = new List<TEntity>();
    using (MongoDbContext dbContext = new MongoDbContext(_dbFactory))
    {
        var cursor = dbContext.Set<TEntity>().FindAll().SetSortOrder(SortBy.Descending("ModifiedDateTime")).SetLimit(5);

        foreach (TEntity entity in cursor)
        {
            entities.Add(entity);
        }
    }

    return entities;
}
Run Code Online (Sandbox Code Playgroud)

但我想只获取最近的5个文档,FindAll()加载集合中的所有文档.我试图用Find()来做,但它需要一个查询作为参数.如何在Mongo驱动程序中为C#编写"orderby"查询进行排序?

/sf/answers/150393561/在这里问了一个类似的问题.但是接受的答案对我不起作用.

har*_*har 11

using (MongoDbContext dbContext = new MongoDbContext(_dbFactory))
{
    var query = new QueryDocument();

    var cursor =
        dbContext.Set<TEntity>().Find(query).SetSortOrder(SortBy.Descending("ModifiedDateTime")).SetLimit(5);

    foreach (TEntity entity in cursor)
    {
        entities.Add(entity);
    }
}
Run Code Online (Sandbox Code Playgroud)

也是解决这个问题的正确方法


VSO*_*VSO 6

看起来接受的答案已经过时或者我不明白。这是在 MongoDb C# Driver 2.0 中排序的方式:

var list = await collection
                     .Find(fooFilter)
                     .Sort(Builders<BsonDocument>.Sort.Descending("NameOfFieldToSortBy")
                     .ToListAsync();
Run Code Online (Sandbox Code Playgroud)