MongoDB Driver中如何使用FindOneAsync?现有查询代码是否有效?
MongoDB .NET Driver 中 FindOneAsync 替代方案的正确性说明
你的这段代码是完全可行的,而且不会扫描集合中的所有条目,和你期望的 FindOneAsync 效果完全一致。
核心原理
MongoDB .NET Driver 的 Find(filter) 返回的是 IFindFluent 对象,调用 FirstOrDefaultAsync() 时,驱动会向 MongoDB 服务器发送一个「仅返回第一条匹配文档」的查询指令(对应 MongoDB Shell 中的 findOne())。服务器端找到第一个符合过滤条件的文档后就会停止查询,不会遍历整个集合。
关于 FindOneAsync 的现状
新版 MongoDB .NET Driver 中仍然保留了 FindOneAsync 方法,你也可以直接这样写:
var shortUrl = await _connector.ShortUrlCollection.FindOneAsync(filter);
它和你用 Find(filter).FirstOrDefaultAsync() 的逻辑、性能完全等价,只是后者的语义更贴合 C# 开发者的常规习惯(和 LINQ 的用法一致),所以现在更常用。
优化建议
如果你的 OriginUrl 字段查询频率较高,建议给这个字段创建索引,服务器会利用索引快速定位匹配文档,进一步提升查询效率。
内容的提问来源于stack exchange,提问作者Nick Farsi
相关产品推荐
相关产品推荐

