2012-03-28 86 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