I’ve seen a lot of solutions relating to updating a document array but nothing seems to work. I need to change the first item of an array (dosage) to a new value (newdosage) in C#
I specify the document I want to update:
filter = Builders.Filter.Eq("_id", new ObjectId(Key));
I try to create an update query:
first try: var update = Builders.Update.Set( f => f.dosage[-1], newdosage);
This doesn’t work because the dosage property is not known in a BsonDocument
second try: var update = Builders.Update.Set(x => x.Dosage[-1], newdosage);
This is recognized to be a valid assignment so I try to execute: collection.UpdateOne(filter, update);
collection is assigned and the database would be accessed fine except UpdateOne requires
the second parameter to be of BsonDocument type.
I’ve tried numerous other solutions but nothing works. Can anyone help:
Thanks.
The C# starters guide always gives examples of filtering on array elements before an update but in this case the array elements are unknown data or complex objects. Their positioning examles using $ don’t work in C#.
The problem is clear in this example of array insertion:
set up ‘collection’ to access data base, then:
var filter = Builders.Filter.Eq(Keys.MongoId, ObjectId.Parse(chatRoomId));
var update = Builders.Update.PushEach(Keys.Comments, new List() { comment }, position: 0);
collection.UpdateOne(filter, update);
This gives a C# syntax error because filter and update are not created as ‘Builders…’
There are many “solutions” that seem to get around C# typing in the mongodb update calls.
the file belongs to a test file of UpdateDefinitionBuilderTests.cs of the driver and seems to do the thing you are trying.
every “test” file in the repo is also an example of that feature so much so that even documentation points to these files for examples. again, if you haven’t been there before, you will find that useful.