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));
}
};
我是 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));
}
};