Я бы сделал это так:
var filter = Builders<MyCollectionModel>.Filter
.Eq(x => x.Id, ObjectId.Parse("5ecd93f739a1c716ab2c2d44"));
var update = Builders<MyCollectionModel>.Update.Set(x => x.Email, "john.smith@gmail.com");
var updateResult = await context.MyCollectionModel
.UpdateOneAsync(filter, update, new UpdateOptions {IsUpsert = true});
updateResult.Dump(); // LINQPad
Тогда, если документ с таким идентификатором существует, но изменений не было, вы получите:
, если документ с этим идентификатором существует и адрес электронной почты был изменен, вы получите:
и, наконец, если документ не существует, поэтому он был добавлен, UpsertedId
покажет его идентификатор.