Mongodb C#驱动程序引发元素名称“ _t”在UpdateOneAsync上无效

问题描述

我收到MongoDb.Bson.SerializationException:'元素名称'_t'无效。 我最初在网上阅读了所有看起来类似问题的文章,但是在这文章中,指定了元素名称,即使尝试使用不同的类对象,我在这里也只能得到“ _t”。

        var database = AppConfig.client.GetDatabase("test");
        var collection = database.GetCollection<BsonDocument>("testcollection");

        var filter = Builders<Student>.Filter.Eq(g => g.Name,"oldName");
        

        var update = Builders<Student>.Update.Set(g => g.Name,"NewName");

        var updateResult = await collection.UpdateOneAsync(filter.ToBsonDocument(),update.ToBsonDocument());

此外,对于我在网上看到的有关UpdateOneAsync函数的所有示例,下面的过滤器和更新不必是BSON文档,但是,除非如上所述我执行.ToBSONDocument(),否则我的代码将不会编译。

var updateResult =等待收集。UpdateOneAsync(过滤器,更新);

我的课程很少:

    public class Student
    {
      [BsonElement("Name")]
      public string Name { get; set; }

      [BsonElement("Age")]
      public int Age { get; set; }
    
     }

有人可以帮忙弄清楚上面的问题吗?

更新:如何使用渲染进行更新。设置

        var registry = BsonSerializer.SerializerRegistry;
        var serializer = registry.GetSerializer<Student>();

        var filter = Builders<Student>.Filter.Eq(g=> g.Name,"NewName").Render(serializer,registry);

//我认为更新语法不正确。

        var update = Builders<Student>.Update.Set(g => g.Name,"Changed").Render(serializer,registry);


//update is throwing error:cannot convert from Mongodb.bson.bsonvalue to mongodb.Driver.updatedeFinition<MongoDB.Bson.BsonDocument
            var updateResult = await collection.UpdateOneAsync(filter,update);

解决方法

像您一样使用ToBsonDocument是不可能的。最简单的解决方法是使用未键入的构建器:

var filter = Builders<BsonDocument>.Filter.Eq("name","oldName");

如果要使用类型化的生成器,应按以下方式致电Render

        var registry = BsonSerializer.SerializerRegistry;
        var serializer = registry.GetSerializer<Student>();
        var filter = Builders<Student>.Filter.Eq(e=>e.Name,"oldName").Render(serializer,registry);

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...