My code is below:
MyModel requestID = new MyModel
{
"id" = "123"
};
MyModel toUpdate = new MyModel
{
"is_cancelled" : true
};
FilterDefinition<MyModel> filter = requestID.ToBsonDocument();
UpdateDefinition<MyModel> update = toUpdate.ToBsonDocument();
collection.FindOneAndUpdate(filter, update);
My 1 Document in DocumentDB for example is:
{
"id": "123",
"delnum": "100001"
}
My toUpdate is:
{
"is_cancelled" : true
}
My expected document after FindOneAndUpdate is:
{
"id": "123",
"delnum": "100001",
"is_cancelled" : true
}
but what is happening is, it is replacing my document with id=123 to below:
{
"is_cancelled" : true
}
I would like to know if I am doing it wrong, or what my expectation outcome is not correct.
Edited Code:
MyModel requestID = new MyModel
{
"id" = "123"
};
MyModel toUpdate = new MyModel
{
"is_cancelled" : true
};
var builder = Builders<MyModel>.Update;
UpdateDefinition<MyModel> update =null;
toUpdate.GetType().GetProperties().ToList().ForEach(
x => update = builder.Set(x.Name, x.GetValue(toUpdate, null))
FilterDefinition<MyModel> filter = requestID.ToBsonDocument();
if (update == null) return;
collection.FindOneAndUpdate(filter, update);
EDIT: code below what worked for me.
var filterData = Builders<MyModel>.Filter.Eq("id", "123"); //requestID
var updateData = new BsonDocumentUpdateDefinition<MyModel>(new BsonDocument("$set", toUpdate));
await collection.FindOneAndUpdateAsync(filter, updateData , new FindOneAndUpdateOptions<MyModel>() { IsUpsert = false });