如何为“;orderby”;在Mongo驱动程序中为C#排序
本文关键字:驱动程序 排序 Mongo orderby | 更新日期: 2023-09-27 18:24:52
我正试图使用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;
}
但我只想获得最近的5个文档,FindAll()加载集合中的所有文档。我试着用Find()来做,但它需要一个查询作为参数。如何在Mongo驱动程序中为"orderby"编写查询以供C#排序?
https://stackoverflow.com/a/2148479/778101在这里问了一个类似的问题。但公认的答案对我来说不起作用。
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);
}
}
也是解决这个问题的正确方法
看起来接受的答案已经过时或我不明白。这就是您在MongoDb C#驱动程序2.0:中的订购方式
var list = await collection
.Find(fooFilter)
.Sort(Builders<BsonDocument>.Sort.Descending("NameOfFieldToSortBy")
.ToListAsync();
您可以使用MongoDB.Driver.Builders.Query.Null
作为Find()的IMongoQuery参数,然后使用SetSortOrder().SetLimit()
你的代码可以像一样
dbContext.Set().Find(Query.Null).SortOrder(SortBy.Descending("ModifiedDateTime")).SetLimit(5);
您应该使用Find方法。c#中的Query.And()
将等效于mongodb shell中的空查询{}
。所以完整的例子看起来像:
dbContext.Set<TEntity>()
.Find(Query.And())
.SetSortOrder(SortBy.Descending("ModifiedDateTime"))
.SetLimit(5);
事实上,如果你收集强类型,它有方法Find(IMongoQuery query)
,如果没有,那么它有方法FindAs<Type>(IMongoQuery query)
。
FindAll只是Find(Query.Null)的快捷方式。
没有理由不能将SetSortOrder和SetLimit与FindAll一起使用。