gpt4 book ai didi

mongodb-.net-driver - 使用MongoDB C#驱动程序2.4在查询中包含/排除字段

转载 作者:行者123 更新时间:2023-12-04 11:20:08 24 4
gpt4 key购买 nike

我们有一个包含服务器中文档的集合。每个文档就像:

{ _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驱动程序中,这相当简单,但我不知道如何在新驱动程序中做到这一点。谢谢。

最佳答案

我有一个类似的问题,我相信您需要指定泛型,因为某些原因,Project会自动采用BsonDocument。这应该将其从BsonDocument修复到您的类。

改变:

var allDocs = collection.Find().Project(fields).ToList();

至:
var allDocs = collection.Find<MyDoc>().Project<MyDoc>(fields).ToList();

至于如何仅包括某些字段,可以像使用builder(使用Include)或使用json形式的字符串一样来完成:
var allDocs = collection.Find<MyDoc>().Project<MyDoc>("{Prop1: 1, Prop2: 1}").ToList();

我强烈建议您查看此人帖子的预测:
https://www.codementor.io/pmbanugo/working-with-mongodb-in-net-part-3-skip-sort-limit-and-projections-oqfwncyka

从这篇文章:

This brings us to another difference: with a projection definition, it implicitly converts the document type from Student to BsonDocument, so what we get back is a fluent object that, in result, will be a BsonDocument (even though what we're working with is the Student type). If we want to work with Student, we have to indicate that we still want to keep the type to Student.

关于mongodb-.net-driver - 使用MongoDB C#驱动程序2.4在查询中包含/排除字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42908042/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com