如何在.NET中实现MongoDB异步排序以获取集合最新插入记录
MongoDB .NET 驱动同步查询方法转异步实现方案
最终异步实现代码
using MongoDB.Driver; using System.Threading.Tasks; public async Task<T> LoadRecentRecordAsync<T>(string collectionName) { var collection = db.GetCollection<T>(collectionName); return await collection.Find(new BsonDocument()) .Sort("{_id:-1}") .Limit(1) .FirstAsync(); }
核心修改说明
- 方法签名遵循.NET异步开发规范:添加
async修饰符,返回值从原有的T改为Task<T>,方法名新增Async后缀 - 同步API替换为异步API:将末尾的同步取值方法
First()替换为MongoDB.Driver内置的异步扩展方法FirstAsync(),并添加await关键字等待异步执行结果
可选优化项
1. 强类型排序(推荐)
避免字符串拼写错误,可将排序参数改为强类型写法:
// 通用写法,无需实体类提前定义Id属性 .Sort(Builders<T>.Sort.Descending("_id")) // 若实体类已明确声明Id属性,用该写法可在编译阶段检查错误 .Sort(Builders<T>.Sort.Descending(x => x.Id))
2. 空集合兼容
如果允许查询不到数据时返回默认值而非抛出异常,可将FirstAsync()替换为FirstOrDefaultAsync()。
注意:调用该异步方法时必须配合
await关键字使用,上层调用方法也需要添加async修饰符,避免出现死锁或拿到未执行完成的Task对象。
内容的提问来源于stack exchange,提问作者Karl
相关产品推荐
相关产品推荐

