使用MongoDB 10gen驱动程序查询投影
本文关键字:查询 投影 驱动程序 10gen MongoDB 使用 | 更新日期: 2023-09-27 18:06:21
最近我正在玩mongodb官方驱动程序。我遇到的问题是如何使查询投影。例如,如果我有一个持久化对象
class A{
id
PropA
PropB
List<LargeObjects>
}
我怎么能只检索id, PropA和prob,而不是检索整个对象?如何使用mongodb官方c#驱动程序?
查询投影可通过:
MongoCollection<>.Find().SetFields(include/exclude);
作为官方10gen MongoDB c#驱动程序的v1.8,(并且正如Zambonilli在之前的回答中回避的那样)Select linq操作符将始终在客户端执行,而不是在db服务器上。
文档(也由Sunil Raj在之前的回答中提供):http://docs.mongodb.org/ecosystem/tutorial/use-linq-queries-with-csharp-driver/
几乎在页面的中间,在"选择"linq查询操作符的下方,有一个红色的大框,上面写着:
警告:选择不会导致从服务器返回更少的字段。整个文档被拉回并传递给本机Select方法。因此,投影在客户端执行。
您可以使用下面的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 +司机+ LINQ +教程# CSharpDriverLINQTutorial-SupportedLINQqueryoperators
看看FluentMongo:
https://github.com/craiggwilson/fluent-mongo/wiki/Linq在Nuget上也有,搜索"fluentmongo"
使用仅包含所需字段的类型FindAs<>
()。看到文档。
在该类上添加[BsonIgnoreExtraElements]
或[BsonExtraElements]
属性。看到文档。
使用Mongo分析器,我能够确定有时Linq结果会投影到客户机上。因此,这取决于你的客户需要什么。如果您希望返回一个结果文档,其中包含来自Mongo服务器的部分数据,那么您将需要使用Marjan或Ian的答案。否则,如果您想读取记录并将其投影到不同的数据类型,则使用Linq.