Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MongoDB C# Driver 2.0 - Update document

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

like image 489
Alessandro Di Lello Avatar asked May 15 '15 10:05

Alessandro Di Lello


People also ask

What is MongoDB C driver?

The MongoDB C Driver, also known as “libmongoc”, is a library for using MongoDB from C applications, and for writing MongoDB drivers in higher-level languages. It depends on libbson to generate and parse BSON documents, the native data format of MongoDB.

Is MongoDB a C++?

Welcome to the documentation site for the official MongoDB C++ driver. You can add the driver to your application to work with MongoDB using the C++11 or later standard.

Is MongoDB free to use?

MongoDB is a NoSQL database that is open source. MongoDB is available in two editions. One is MongoDB Open Source, which is free as part of the Open-Source Community, but for the other editions, you must pay a License fee. When compared to the free edition, this edition has some advanced features.


2 Answers

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) 
like image 147
mnemosyn Avatar answered Nov 05 '22 14:11

mnemosyn


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}); 
like image 36
i3arnon Avatar answered Nov 05 '22 14:11

i3arnon