#c# #arrays #mongodb #insert-update
Вопрос:
Пожалуйста, вы можете помочь мне с использованием драйвера MongoDB.в C#.
Как я должен использовать функцию updateOne с фильтрами и обновленными определениями для объединения элементов в моем массиве в моем документе.
Вот что у меня есть в моей коллекции MongoDB
{
"_id" : ObjectId("6141890bab2c0e75cf5297c9"),
"MyUniqueId" : "123456",
"ModifiedFields" : [
{
"FieldId" : "Address1",
"Current" : "My street, 123"
},
{
"FieldId" : "Address2",
"Current" : "My City"
},
]
}
Я хочу объединить массив измененных полей с этой информацией
{
"_id" : ObjectId("6141890bab2c0e75cf5297c9"),
"MyUniqueId" : "123456",
"ModifiedFields" : [
{
"FieldId" : "Address1",
"Previous" : "My street, 12"
},
{
"FieldId" : "Address2",
"Previous" : "One city"
}
]
}
Поэтому я должен получить это в качестве окончательного результата после обновления
{
"_id" : ObjectId("6141890bab2c0e75cf5297c9"),
"MyUniqueId" : "123456",
"ModifiedFields" : [
{
"FieldId" : "Address1",
"Current" : "My street, 123",
"Previous" : "My street, 12"
},
{
"FieldId" : "Address2",
"Current" : "My City",
"Previous" : "One city"
}
]
}
Но это результат, который я получил
{
"_id" : ObjectId("6141890bab2c0e75cf5297c9"),
"MyUniqueId" : "123456",
"ModifiedFields" : [
{
"FieldId" : "Address1",
"Current" : "My street, 123"
},
{
"FieldId" : "Address2",
"Current" : "My City"
},
{
"FieldId" : "Address1",
"Previous" : "My street, 12"
},
{
"FieldId" : "Address2",
"Previous" : "One city"
}
]
}
These are the class I’m using
[BsonIgnoreExtraElements]
public class RecordsUpdate
{
public string MyUniqueId;
public List<CriterionsDataUpdate> ModifiedFields;
}
public class CriterionsDataUpdate
{
public string FieldId { get; set; }
[BsonIgnoreIfNull]
public string Previous { get; set; }
[BsonIgnoreIfNull]
public string Current { get; set; }
}
And this is how I’ve made the call for the update:
RecordsUpdate recUpdate = new RecordsUpdate(“123456”);
FillPreviousValues(recUpdate); // this function will fill recUpdate.ModifiedFields with “Previous” values like shown above
var update = Builders<RecordsUpdate>.Update.AddToSetEach(r => r.ModifiedFields, recUpdate.ModifiedFields);
var updRes = AlertsTracing.RecordsUpdateCollection.UpdateOne(rec => rec.MyUniqueId == “123456”, update);
Thanks for your help
Eric