Нет универсального c способа сделать это в драйвере C#, и это, скорее всего, связано со сложностью всех различных способов выполнения записи.
Самый простой способ будет чтобы ваш класс имел внутренние свойства только для чтения и отобразил их в карте классов Bson.
class MyObject
{
public ObjectId Id { get; set; }
public string A { get; set; }
public string B { get; set; }
public string C { get; set; }
internal string @default { get; } = "Some-Value";
}
BsonClassMap.RegisterClassMap<MyObject>(map =>
{
map.AutoMap();
map.MapMember(x => x.@default);
});
var client = new MongoClient();
var database = client.GetDatabase("test");
var collection = database.GetCollection<MyObject>("myObjects");
collection.InsertOne(new MyObject
{
A = "1",
B = "2",
C = "3"
});
Выполнение следующего приведет к созданию следующего документа.
> db.myObjects.find()
{ "_id" : ObjectId("5e94cdb60e844938a8ae23a1"), "A" : "1", "B" : "2", "C" : "3", "default" : "Some-Value" }
Однако, если вы сделаете обновление, вам нужно будет указать и это новое свойство по умолчанию.
collection.UpdateOne(x => x.A == "1", Builders<MyObject>.Update.Set(x => x.B, "10").Set(x => x.@default, "stuff"));