我使用Mongo .Net Driver查询MongoDB数据库,我想将返回的Bson文档映射到我的客户对象Poco。
为了做到这一点,我创建了一个LoadCustomers()
来从查询的Bson文档中返回一个反序列化的客户列表。
在我的客户POCO类中,每个属性都标有BsonElement
标记,这有助于将Bson映射到Object。
但是当我尝试使用FindAs<>进行反序列化时从this answer开始,我收到编译错误,指出没有这样的方法。
如何使用MongoDB .Net驱动程序将MongoDB Bson文档作为POCO列表返回?
这是我目前对加载方法的尝试:
public static List<Customer> LoadCustomers()
{
var client = new MongoClient(connectionString);
var database = client.GetDatabase("orders");
//Get a handle on the customers collection:
var docs = database.FindAs<Customer>("customers");
return docs;
}
以下是我的客户POCO,显示文档中的字段:
public class Customer
{
/// <summary>
/// This attribute is used to map the Id property to the ObjectId in the collection
/// </summary>
[BsonId]
public ObjectId Id { get; set; }
[BsonElement("firstName")]
public string firstName { get; set; }
[BsonElement("lastName")]
public string lastName { get; set; }
[BsonElement("email")]
public string Email { get; set; }
}
答案 0 :(得分:3)
如果要选择集合中的所有客户,请使用以下内容:
var docs = await database.GetCollection<Customer>("customers").Find(new BsonDocument()).ToListAsync();
要按id查询单个文档,应使用以下内容:
var filter = Builders<Customer>.Filter.Eq(c => c.Id, <ID>);
var result = await database.GetCollection<Customer>("customers").Find(filter).FirstOrDefaultAsync();
答案 1 :(得分:2)
假设您使用的是最新的驱动程序,首先您必须获取该集合,然后对该集合进行查询。像这样的东西
public static List<Customer> LoadCustomers()
{
var client = new MongoClient(connectionString);
var database = client.GetDatabase("orders");
//Get a handle on the customers collection:
var collection = database.GetCollection<Customer>("customers");
var docs = collection.Find(new BsonDocument()).ToListAsync().GetAwaiter().GetResult();
return docs;
}