MongoDB C# Driver 2.0 - Update document

感情迁移 提交于 2019-11-26 16:25:42

问题


I'm currently upgrading my code to MongoDB C# driver 2.0 and I'm having issues upgrading the code to update documents.

using the old version I was able to do something like this:

MyType myObject; // passed in 
var collection = _database.GetCollection<MyType>("myTypes");
var result = collection.Save(myObject);

I'm struggling to find a way to do this in the new version. I have found a few examples of updating single fields like

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

I'd like to update all the fields as I was doing in the old version with the method Save.

Any ideas ?

Thanks a lot


回答1:


I think you're looking for ReplaceOneAsync():

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



回答2:


To add to mnemosyn's answer, while a simple ReplaceOneAsync does update a document it isn't equivalent to Save as Save would also insert the document if it didn't find one to update.

To achieve the same behavior with ReplaceOneAsync you need to use the options parameter:

MyType myObject; 
var result = await collection.ReplaceOneAsync(
    item => item.Id == id, 
    myObject, 
    new UpdateOptions {IsUpsert = true});



回答3:


you can use LINQ as following:

await context.collection.ReplaceOneAsync(b=> b.Id == item.Id,item);


来源:https://stackoverflow.com/questions/30257013/mongodb-c-sharp-driver-2-0-update-document

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!