IMongoCollection.AsQueryable() 被推迟了吗?

Is IMongoCollection.AsQueryable() Deferred?

我是 mongodb 的新手,正在尝试在我的应用程序中使用 mongodb 实现存储库模式。所以我的问题是当我使用以下查询查询数据库时:

_mongodb.GetCollection<T>(typeof(T).Name.ToLower()).AsQueryable();

它会把所有记录都提取到内存中吗?结果是一个延迟集合,当我迭代它或对其使用 ToList 时它会获取数据吗?

它被推迟了。除非您请求数据或对其执行操作,否则它不会将结果提取到内存中。正如您提到的示例 .ToList().First().Count() 或对其进行迭代。

编辑:

即使可能没有记录,您也可以通过简单的测试来证明这一点。为 mongodb 启用日志记录并执行您在问题中提到的行;你不应该看到查询。然后在另一行中执行 .ToList() ,您将在日志中看到查询。

the official documentation 启用日志记录(示例):

var settings = new MongoClientSettings
{
    ClusterConfigurator = cb =>
    {
        var textWriter = TextWriter.Synchronized(new StreamWriter("mylogfile.txt"));
        cb.AddListener(new LogListener(textWriter));
    }
};