我正在编写一个非常非常简单的查询,该查询只是根据其唯一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返回游标,其中不会一次加载所有文档,并为您提供从DB游标一个接一个地检索文档的界面。当查询结果很大时很有用。
Find通过方法ToListAsync为您提供更简单的语法,其中它在内部从光标中检索文档,而一次返回所有文档

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

10-12 00:07