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);
我收到 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);