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);