2012-03-28 90 views
0

我使用MongoDB的官方C#驱动在select中定义自定义字段时需要“Fields.Include”吗?

所以我有这样的代码

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, 
    })) 

我想如果cursor.Fields = Fields.Include("LastModified", "Name");如果这些领域正在defiend作为选择部分是需要知道。即mongodb的linq提供者是否足够聪明以优化查询?

回答

0

有两个部分答案:

首先,在1.4版本的C#驱动程序的LINQ实现不试图限制领域从服务器返回。即使投影稍后仅使用其中的一部分,整个文档也会一直返回。我们计划在未来的版本中对此进行优化,但并不像听起来那么容易。

其次,你实际上并没有使用LINQ查询,至少不是LINQ to MongoDB查询。在编写代码时,您需要将整个集合提取到客户端(这就是FindAll所做的),然后使用“选择本地”作为检索值。对MongoDB的类似的LINQ查询会被写成这样:

var query = from y in collection.AsQueryable<MyClass>() 
      select new { y.Name, y.LastModified }; 
foreach (var result in query) 
{ 
    // process result 
} 
+0

没有对MongoCollection – Simon 2012-03-29 01:55:40

+0

没有AsQueryable已这是在新的1.4版本刚刚发布3月28日。 – 2012-04-05 00:05:59