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

Mongodb C# driver throwing Element Name '_t' is not valid on UpdateOneAsync

我收到 MongoDb.Bson.SerializationException:“元素名称‘_t’无效。 我一开始在网上阅读了所有似乎是类似问题的帖子,但是,在这些帖子中,指定了元素名称,在这里,即使尝试不同的 class 个对象,我也只会得到 '_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 = await collection.UpdateOneAsync(过滤,更新);

我的class是最小的:

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

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

谁能帮忙看看上面有什么问题吗?

更新:如何为 Update.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);