MongoDb BsonClassMap
本文关键字:BsonClassMap MongoDb | 更新日期: 2023-09-27 18:14:12
我是MongoDb的新手,我目前正在使用CSharp驱动程序(1.2版)。我的问题发生时,使用BsonClass地图。下面是我要执行的代码。我只是定义了一个自定义类型,我想将其映射到BsonDocument。
为了使用这个,我正在利用BsonClassMap.RegisterClassMap()。当我点击foreach语句(试图访问FinAs()结果中的第一个条目)时,我得到以下错误:
'无法从BsonType objecd中反序列化Guid '
从我的理解BsonClassMap使用GuidGenerator类型的Guid对象。为什么会出现这个错误?
请注意,插入执行没有任何错误…在执行插入操作之后,newEmployee有一个自动生成的EmployeeId。
下面是我要运行的代码:
class Program{
static void Main(string[] args){
MongoServer server = MongoServer.Create();
MongoDatabase dataBase = server.GetDatabase("test");
MongoCollection<Employee>employees = dataBase.GetCollection<Employee>("employees");
BsonClassMap.RegisterClassMap<Employee>(cm =>
{
cm.MapProperty(c => c.Name);
cm.MapProperty(c => c.Email);
cm.MapIdProperty(c => c.EmployeeId);
});
var newEmployee = new Employee{ Name="Test", Email="test@test.com"};
employees.Insert(newEmployee);
foreach(Employee e in employees.FindAs<Employee>(Query.EQ("Name","Test")){
Console.Writeline(e.Name);
}
}
}
public class Employee
{
public Guid EmployeeId {get;set;}
public string Name {get;set;}
public string Email {get;set;}
}
我怀疑您需要使用SetIdMember来标识您的id字段。您不使用ObjectId
值而不是Guids有什么特别的原因吗?
原来我有一些额外的文档存储在我的集合之前,我开始使用BsonClassMap。它们的ObjectId以MongoDB的原生格式存储....不幸的是,这种格式不能解析为Guid。为了修复这个错误,我最终清除了所有旧的条目。