Mongodb C# 驱动程序:我应该在同一查询中同时使用 FindAysnc 和 ToListAsync

bgr*_*ham 5 c# mongodb

Mongodb 有一个 FindAsync 和一个 Find。我知道如果您要传递光标,这可能会有用,但我不完全理解它如何与自己的 ToListAsync 一起使用。这里有两个查询。一个比另一个性能更好吗?特别是查询 200-1000 个文档。

public async Task<List<MongoUser>> GetUsersAsync(IEnumerable<Guid> userGuids)
{
    var filter = Builders<MongoUser>.Filter.In(u => u.Guid, userGuids);
    var resultCursor = await Db.GetCollection<MongoUser>("Users").FindAsync(filter);
    var users = await resultCursor.ToListAsync();
    return users;
}

public async Task<List<MongoUser>> GetUsersAsync2(IEnumerable<Guid> userGuids)
{
    var filter = Builders<MongoUser>.Filter.In(u => u.Guid, userGuids);
    var users = await Db.GetCollection<MongoUser>("Users").Find(filter).ToListAsync();
    return users;
}
Run Code Online (Sandbox Code Playgroud)

这个问题类似,供参考

但是,我认为我的问题的答案并不明确。通过评论,询问者说“无论哪种方式,我都加载了一个文档”,而答复是“对于一个文档,查找看起来更好,因为你不使用光标。” 我相信这个问题的线索就到此结束了。

答案令人困惑,因为他说“Find 和 FindAsync 都允许构建具有相同性能的异步查询”和“FindAsync 返回游标,它不会立即加载所有文档,并为您提供从数据库游标中一一检索文档的接口” .当查询结果很大时,这很有帮助。” 也许他也指的是一些小问题。

我希望了解 MongoDb 是否仅使用 ToListAsync() 表现良好,在整个命令完成之前不阻塞线程,或者是否有必要使用 FindAsync() 强制 MongoDb 在构建时释放线程查询或 Find() 本身所做的任何事情。