Как добавить элемент json в каждом действии записи в MongoDb, используя C# SDK? - PullRequest
0 голосов
/ 10 апреля 2020

В настоящее время я использую C# MongoDB SDK для записи своей сущности в коллекцию. Однако при каждой «записи» в документ json необходимо писать элемент JSON. Есть ли способ достичь этого?

Пример: если у моей сущности есть 3 свойства A, B, C, то при каждой записи объекта этой сущности в MongoDb я хочу 4-й элемент с именем "default" для добавления, а затем для отправки в MongoDb.

Итак, итоговым документом будет A, B, C, по умолчанию.

1 Ответ

0 голосов
/ 14 апреля 2020

Нет универсального 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"));
...