c# - Mongodb C# 驱动程序抛出元素名称“_t”在 UpdateOneAsync 上无效
问题描述
我得到 MongoDb.Bson.SerializationException: 'Element name '_t' is not valid。我首先在线阅读了所有看起来类似问题的帖子,但是,在这些帖子中,指定了元素名称,在这里,即使尝试不同的类对象,我也只会得到“_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(filter, update);
我的课很少:
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);
推荐阅读
- java - 如何在 Adpater 中使用 OnActivityResult 和 startIntentSenderForResult
- shell - 在 for 循环和打印的帮助下遍历密钥对值
- flutter - 使用 carousel_slider Flutter 包加载本地图像
- html - 三角形背景顶部的 HTML 图像
- tfs - 如何将用户添加到 Team Foundation Server?
- c# - 仅根据调用程序集编译我的程序的某些部分
- javascript - cartItem.innerHTML =" 这一行显示 Uncaught SyntaxError: Invalid or unexpected token
- image - 使用 Swift5 在 iOS 中裁剪、旋转、调整图像大小
- shell - Shellscript 评估命令与命令的差异:多个 $(uuidgen) 得到相同的结果
- python - 上下文处理器('AnonymousUser' 对象不可迭代)