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
我想你是在找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);