c# - Find 和 FindAsync 之间的区别

标签 c# mongodb mongodb-query mongodb-csharp-2.0

我正在编写一个非常非常简单的查询,它只是根据其唯一 ID 从集合中获取文档。经过一些挫折(我是 mongo 和 async/await 编程模型的新手),我想通了:

IMongoCollection<TModel> collection = // ...
FindOptions<TModel> options = new FindOptions<TModel> { Limit = 1 };
IAsyncCursor<TModel> task = await collection.FindAsync(x => x.Id.Equals(id), options);
List<TModel> list = await task.ToListAsync();
TModel result = list.FirstOrDefault();
return result;

成功了,太棒了!但我不断看到对“查找”方法的引用,我解决了这个问题:

IMongoCollection<TModel> collection = // ...
IFindFluent<TModel, TModel> findFluent = collection.Find(x => x.Id == id);
findFluent = findFluent.Limit(1);
TModel result = await findFluent.FirstOrDefaultAsync();
return result;

事实证明,这也行得通,太棒了!

我确信我们有两种不同的方法来实现这些结果是有一些重要原因的。这些方法之间有什么区别,为什么我应该选择其中一种?

最佳答案

区别在于语法。 FindFindAsync 都允许构建具有相同性能的异步查询,只是

FindAsync 返回 cursor,它不会一次加载所有文档,并为您提供从数据库游标中逐个检索文档的界面。这在查询结果很大的情况下很有用。

Find 通过 ToListAsync 方法为您提供更简单的语法,它在其中从游标中检索文档并立即返回所有文档

关于c# - Find 和 FindAsync 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46413550/

相关文章:

javascript - .net core 2.0 signalr 为什么我不能使用用户名发送

c# - 关闭的局部变量与匿名操作中的预期不同

c# - 用 C# 设计类

mongodb - MongoDB 的 BinData(0, "0") 中的 "e8MEnzZoFyMmD7WSHdNrFJyEk8M="是什么意思?

c# - 从 2.0 MongoDb c# 驱动程序获取结果

Meteor JS 中的 MongoDB 聚合和分组问题

mongodb - 仅检索 MongoDB 集合中对象数组中的查询元素

c# - 如何在 C# 中的 NHibernate 的 QueryOver 中使用 Oracle 的内置关键字或函数?

node.js - Mongoose - 'save' 方法不存在

mongodb - 尝试在 mongo db 3.0 上限制 Group By 数据