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;}
     }

MongoDb BsonClassMap

我怀疑您需要使用SetIdMember来标识您的id字段。您不使用ObjectId值而不是Guids有什么特别的原因吗?

原来我有一些额外的文档存储在我的集合之前,我开始使用BsonClassMap。它们的ObjectId以MongoDB的原生格式存储....不幸的是,这种格式不能解析为Guid。为了修复这个错误,我最终清除了所有旧的条目。