【发布时间】:2017-03-20 15:47:05
【问题描述】:
我们在服务器中有一个包含文档的集合。每个文档都是这样的:
{ _id: "...", Prop1: "", Prop2: "", Prop3: "", LargeField: "", ... }
还有很多其他字段,但客户端不需要。
我想将文档加载为MyDoc 类,其定义为:
public class MyDoc {
public string Id { get; set; }
public string Prop1 { get; set; }
public string Prop2 { get; set; }
public string Prop3 { get; set; }
public string LargeField { get; set; }
}
我试过了:
var client = new MongoClient(uri);
var database = client.GetDatabase("MyDatabase");
var collection = database.GetCollection<MyDocs>("MyDocs");
var allDocs = collection.Find().ToList();
然后它将加载每个文档的所有字段,因此我必须将[BsonIgnoreExtraElements] 放在MyDoc 上。这里的问题是文档很大,但我只需要有限的字段子集。是否可以让司机知道我只需要类中定义的字段?
如果没有,是否可以排除一些像LargeField 这样的字段以使结果集更小?我试过了:
var fieldsBuilder = Builders<MyDoc>.Projection;
var fields = fieldsBuilder.Exclude(d => d.LargeField);
var allDocs = collection.Find().Project(fields).ToList();
但现在allDocs 变为BsonDocument 列表而不是MyDoc 列表。如何用投影查询MyDoc?
有人可以帮忙吗?在旧版 MongoDB 驱动程序中它相当简单,但我不知道如何在新驱动程序中做到这一点。谢谢。
【问题讨论】: