2011-08-21 30 views
12

最近我用MongoDB的官方驅動播放。 我遇到的問題是如何進行查詢投影。 例如,如果我有一個持久對象查詢投影用MongoDB的10gen的司機

class A{ 
    id 
    PropA 
    PropB 
    List<LargeObjects> 
} 

我怎麼只能檢索ID,PropA和PROPB而不是檢索整個對象? 如何使用mongodb官方的c#驅動程序?

+1

Q.P可通過MongoCollection <>查找()SetFields(包含/排除); –

+0

setfields在我看來不是投影。它只是使文檔空值,所以你還是有一個「完整的文檔,只需用一些空值。 –

回答

0

使用FindAs<>()。見docs

添加[BsonIgnoreExtraElements][BsonExtraElements]屬性上的類。見docs

+0

基本上它原來,SetField調用從收集閱讀是足以讓QP –

13

查詢投影,可通過:

MongoCollection<>.Find().SetFields(include/exclude); 
0

使用蒙戈profiler我能夠確定有時Linq結果會投影到客戶端。所以這取決於你的客戶需求是什麼。如果你想從Mongo服務器返回一個帶有部分數據的結果文檔,那麼你會想要使用Marjan或Ian的答案。否則,如果您想要讀取記錄並將其投影到不同的數據類型,請使用Linq。

5

從官方的10gen MongoDB C#驅動程序的v1.8開始,(和Zambonilli在前面的回答中一樣),Select linq操作符將始終在客戶端執行,而不是在數據庫服務器上執行。

文件(也由蘇尼爾拉吉在前面的回答提供):http://docs.mongodb.org/ecosystem/tutorial/use-linq-queries-with-csharp-driver/

幾乎一半時的頁面,「選擇」 LINQ查詢操作下,是一個大紅色的盒子,上面寫着:

警告:選擇不會導致從服務器返回更少的字段。整個文檔被拉回並傳遞給本地Select方法。因此,投影是在客戶端執行的。 。