我正在使用官方的MongoDB C#驱动程序
所以我有这个代码
MongoCollection<MyClass> collection = ...;
var cursor = collection.FindAll();
cursor.Fields = Fields.Include("LastModified", "Name");
foreach (var result in cursor.Select(y => new
{
y.Name,
y.LastModified,
}))
我想知道如果这些字段作为select的一部分被定义,是否需要cursor.Fields = Fields.Include("LastModified", "Name");
。即mongodb的linq提供商是否足以优化查询?
答案 0 :(得分:0)
答案分为两部分:
首先,1.4版本的C#驱动程序中的LINQ实现不会尝试限制从服务器返回的字段。即使投影稍后仅使用其中的一部分,也始终返回整个文档。我们计划在未来版本中对此进行优化,但这并不像听起来那么容易。
其次,您实际上并没有使用LINQ查询,至少不是LINQ to MongoDB查询。编写代码时,您将整个集合提取到客户端(这就是FindAll所做的),然后针对检索到的值使用Select local。针对MongoDB的类似LINQ查询将编写如下:
var query = from y in collection.AsQueryable<MyClass>()
select new { y.Name, y.LastModified };
foreach (var result in query)
{
// process result
}