MongoDB c# Driver 2.0 -更新文档

本文关键字:更新 文档 Driver MongoDB | 更新日期: 2023-09-27 17:49:18

我目前正在将我的代码升级到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);

我想更新所有的字段,因为我在旧版本中使用方法保存。

有什么想法吗?

Thanks to lot

MongoDB c# Driver 2.0 -更新文档

我想你是在找ReplaceOneAsync():

MyType myObject; // passed in 
var filter = Builders<MyType>.Filter.Eq(s => s.Id, id);
var result = await collection.ReplaceOneAsync(filter, myObject)

添加到memormosyn的答案,而一个简单的ReplaceOneAsync更新文档,它不等同于Save,因为Save也会插入文档,如果它没有找到一个更新。

要实现与ReplaceOneAsync相同的行为,您需要使用options参数:

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