最近我用MongoDB的官方驅動播放。 我遇到的問題是如何進行查詢投影。 例如,如果我有一個持久對象查詢投影用MongoDB的10gen的司機
class A{
id
PropA
PropB
List<LargeObjects>
}
我怎麼只能檢索ID,PropA和PROPB而不是檢索整個對象? 如何使用mongodb官方的c#驅動程序?
最近我用MongoDB的官方驅動播放。 我遇到的問題是如何進行查詢投影。 例如,如果我有一個持久對象查詢投影用MongoDB的10gen的司機
class A{
id
PropA
PropB
List<LargeObjects>
}
我怎麼只能檢索ID,PropA和PROPB而不是檢索整個對象? 如何使用mongodb官方的c#驅動程序?
在FluentMongo看看:
https://github.com/craiggwilson/fluent-mongo/wiki/Linq
它可用於的NuGet藏漢,具有類型只包含所需的字段搜索 「fluentmongo」
查詢投影,可通過:
MongoCollection<>.Find().SetFields(include/exclude);
您可以使用下面的LINQ查詢爲此:
//NB: Not tested
MongoCollection<BsonDocument> Acollection = _db.database.GetCollection<BsonDocument>("A");
var resultlist = (from k in Acollection.AsQueryable<A>()
select k.id,k.PropA,k.PropB);
在LINQ查詢的詳細信息可以在這裏找到: http://www.mongodb.org/display/DOCS/CSharp+Driver+LINQ+Tutorial#CSharpDriverLINQTutorial-SupportedLINQqueryoperators
有沒有LINQ實現回然後 :) –
使用蒙戈profiler我能夠確定有時Linq結果會投影到客戶端。所以這取決於你的客戶需求是什麼。如果你想從Mongo服務器返回一個帶有部分數據的結果文檔,那麼你會想要使用Marjan或Ian的答案。否則,如果您想要讀取記錄並將其投影到不同的數據類型,請使用Linq。
從官方的10gen MongoDB C#驅動程序的v1.8開始,(和Zambonilli在前面的回答中一樣),Select linq操作符將始終在客戶端執行,而不是在數據庫服務器上執行。
文件(也由蘇尼爾拉吉在前面的回答提供):http://docs.mongodb.org/ecosystem/tutorial/use-linq-queries-with-csharp-driver/
幾乎一半時的頁面,「選擇」 LINQ查詢操作下,是一個大紅色的盒子,上面寫着:
警告:選擇不會導致從服務器返回更少的字段。整個文檔被拉回並傳遞給本地Select方法。因此,投影是在客戶端執行的。 。
Q.P可通過MongoCollection <>查找()SetFields(包含/排除); –
setfields在我看來不是投影。它只是使文檔空值,所以你還是有一個「完整的文檔,只需用一些空值。 –