MongoDB C# 驱动程序 2.0 - 更新文档
MongoDB C# Driver 2.0 - Update document
我目前正在将我的代码升级到 MongoDB C# 驱动程序 2.0,我在升级代码以更新文档时遇到问题。
使用旧版本我可以做这样的事情:
MyType myObject; // passed in
var collection = _database.GetCollection<MyType>("myTypes");
var result = collection.Save(myObject);
我正在努力寻找在新版本中执行此操作的方法。
我发现了一些更新单个字段的示例,例如
var filter = Builders<MyType>.Filter.Eq(s => s.Id, id);
var update = Builders<MyType>.Update.Set(s => s.Description, description);
var result = await collection.UpdateOneAsync(filter, update);
我想更新所有字段,就像我在旧版本中使用保存方法所做的那样。
有什么想法吗?
非常感谢
我想你在找 ReplaceOneAsync()
:
MyType myObject; // passed in
var filter = Builders<MyType>.Filter.Eq(s => s.Id, id);
var result = await collection.ReplaceOneAsync(filter, myObject)
添加到 mnemosyn 的答案中,虽然简单的 ReplaceOneAsync
确实会更新文档,但它不等同于 Save
,因为 Save
也会插入文档,如果它没有找一个更新。
要实现与 ReplaceOneAsync
相同的行为,您需要使用选项参数:
MyType myObject;
var result = await collection.ReplaceOneAsync(
item => item.Id == id,
myObject,
new UpdateOptions {IsUpsert = true});
您可以按如下方式使用 LINQ:
await context.collection.ReplaceOneAsync(b=> b.Id == item.Id,item);
使用ObjectId.Parse(id)
var filter = Builders<MyType>.Filter.Eq(s => s.Id, ObjectId.Parse(id));
var update = Builders<MyType>.Update.Set(s => s.Description, description);
var result = await collection.UpdateOneAsync(filter, update);
我目前正在将我的代码升级到 MongoDB C# 驱动程序 2.0,我在升级代码以更新文档时遇到问题。
使用旧版本我可以做这样的事情:
MyType myObject; // passed in
var collection = _database.GetCollection<MyType>("myTypes");
var result = collection.Save(myObject);
我正在努力寻找在新版本中执行此操作的方法。 我发现了一些更新单个字段的示例,例如
var filter = Builders<MyType>.Filter.Eq(s => s.Id, id);
var update = Builders<MyType>.Update.Set(s => s.Description, description);
var result = await collection.UpdateOneAsync(filter, update);
我想更新所有字段,就像我在旧版本中使用保存方法所做的那样。
有什么想法吗?
非常感谢
我想你在找 ReplaceOneAsync()
:
MyType myObject; // passed in
var filter = Builders<MyType>.Filter.Eq(s => s.Id, id);
var result = await collection.ReplaceOneAsync(filter, myObject)
添加到 mnemosyn 的答案中,虽然简单的 ReplaceOneAsync
确实会更新文档,但它不等同于 Save
,因为 Save
也会插入文档,如果它没有找一个更新。
要实现与 ReplaceOneAsync
相同的行为,您需要使用选项参数:
MyType myObject;
var result = await collection.ReplaceOneAsync(
item => item.Id == id,
myObject,
new UpdateOptions {IsUpsert = true});
您可以按如下方式使用 LINQ:
await context.collection.ReplaceOneAsync(b=> b.Id == item.Id,item);
使用ObjectId.Parse(id)
var filter = Builders<MyType>.Filter.Eq(s => s.Id, ObjectId.Parse(id));
var update = Builders<MyType>.Update.Set(s => s.Description, description);
var result = await collection.UpdateOneAsync(filter, update);