使用MongoDB 10gen驱动程序进行查询投影

时间:2011-08-21 20:50:28

标签: c# mongodb

最近我和mongodb官方司机一起玩。 我遇到的问题是如何进行查询投影。 示例,如果我有一个持久化对象

class A{
  id
  PropA
  PropB
  List<LargeObjects>
}

我怎样才能检索id,PropA和PropB而不是检索整个对象? 如何使用mongodb官方c#驱动程序?

6 个答案:

答案 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)

看看FluentMongo:

https://github.com/craiggwilson/fluent-mongo/wiki/Linq

它可以在Nuget上找到,搜索“fluentmongo”

答案 4 :(得分:0)

FindAs<>()用于仅包含所需字段的类型。请参阅docs

在该类上添加[BsonIgnoreExtraElements][BsonExtraElements]属性。请参阅docs

答案 5 :(得分:0)

使用Mongo探查器我能够确定有时Linq结果会投射到客户端上。因此,这取决于您的客户需求。如果您想从Mongo服务器返回包含部分数据的结果文档,那么您将需要使用Marjan或Ian的答案。否则,如果要读取记录并将其投影到其他数据类型,请使用Linq。