2016-02-05 99 views
4

我正在嘗試使用MongoDB C#驅動程序版本2.2。我正在嘗試使用投影,因爲我不想檢索文檔中的所有元素。 我發現做到這一點的方法之一是使用find操作,像這樣一起使用項目運營商:在MongoDB C#驅動程序中使用AsQueryable進行投影2.2

collection.Find(key => key.Index == 1).Project<MyClass>(Builders<MyClass>.Projection.Include(key => key.Name).Include(key => key.Index)). ToEnumerable(); 

不過我感興趣的使用AsQueryable已API與地方運營商,像這樣一起:

collection.AsQueryable().Where(key => key.Index == 1); 

以上情況是否可以使用投影?如果我使用select操作符,它是否與投影具有相同的效果?或者仍然會從數據庫服務器獲取所有元素,然後在應用程序服務器中選擇指定的元素?

回答

5

是的,這是可能的。如果你在最後添加一個SelectSelect(i => new { i.Name, i.Index}))到您的查詢和調用ToString方法,你會看到LINQ提供程序產生的聚合管道有兩個操作(一$match$project):

var query=collection.AsQueryable().Where(key => key.Index == 1).Select(k=>new {k.Name,k.Index}); 
var aggregate= query.ToString(); 

在sumary ,是的,一個Select生成一個$project操作。

關於您的其他問題,只有調用ToList(即將查詢結果存入內存)或迭代結果時,纔會執行查詢。

+0

是否可以使用Excluded語法? – zicjin