MongoDb linq和内存查询.我怎么知道它在数据库中查询



这个问题以前被问过很多次,我从不同的人那里得到了不同的答案。

有人说什么时候:

collection.AsQueryable<object>().Where()

使用"Where"操作是在内存中完成的,其他人说它被转换为mongo查询。

当我引用时:使用MongoDB。Driver.Linq;

我可以访问AsQueryable(),但如果不引用System.Linq.,我就无法在其末尾链接"Where"子句

因此,我做了一个测试,将80000个复杂对象插入到我的本地mongodb中,并进行了一个简单的查询。返回其中50个对象的任意给定页面大约需要5秒。这让我相信它是在记忆中完成的。

文档似乎提倡使用普通的Linq进行查询:http://docs.mongodb.org/ecosystem/tutorial/use-linq-queries-with-csharp-driver/

但在示例中,它没有引用System.Linq。它还指出,Linq可以在1.8版本上使用。我的版本比那个版本高,所以我应该没事。

通常,如果将这些类型的函数应用于collection.AsQueryable<object>(),则会在MongoDb中完成。如果在应用.ToList()函数或实际从枚举中读取的任何类似函数之后执行,则会在内存中执行。

要自己检查,请在单独的指令中执行AsQueryable()Where(),并使用调试器进行检查。

最新更新