最近我和mongodb官方司机一起玩。 我遇到的问题是如何进行查询投影。 示例,如果我有一个持久化对象
class A{
id
PropA
PropB
List<LargeObjects>
}
我怎样才能检索id,PropA和PropB而不是检索整个对象? 如何使用mongodb官方c#驱动程序?
答案 0 :(得分:13)
可通过以下方式查询投影:
MongoCollection<>.Find().SetFields(include/exclude);
答案 1 :(得分:5)
从官方10gen MongoDB C#驱动程序的v1.8开始,(以及Zambonilli在之前的回答中没有提到),Select linq运算符将始终在客户端执行,而不是在数据库服务器上执行。
文档(Sunil Raj在之前的回答中也提供):http://docs.mongodb.org/ecosystem/tutorial/use-linq-queries-with-csharp-driver/
在“选择”linq查询运算符下,页面的大约一半是一个大的红色框,显示为:
警告:选择不会导致从服务器返回的字段更少。将整个文档拉回并传递给本机Select方法。因此,投影在客户端执行。
答案 2 :(得分:2)
您可以使用以下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
答案 3 :(得分:0)
答案 4 :(得分:0)
答案 5 :(得分:0)
使用Mongo探查器我能够确定有时Linq结果会投射到客户端上。因此,这取决于您的客户需求。如果您想从Mongo服务器返回包含部分数据的结果文档,那么您将需要使用Marjan或Ian的答案。否则,如果要读取记录并将其投影到其他数据类型,请使用Linq。