Atualizando um documento incorporado no MongoDB com o driver C # oficial
Se eu tiver uma coleção da empresa que contenha divisões incorporadas:
{
"_id": 1
"_t": "Company",
"Name": "Test Company"
"Divisions": [
{
"_id": 1
"_t": "Division",
"Name": "Test Division 1"
},
{
"_id": 2
"_t": "Division",
"Name": "Test Division 2"
}
]
}
Qual é a melhor maneira de salvar / atualizar uma divisão inteira ao usar odriver oficial de 10gen C #? (A versão mais recente 0.9)
Estou usando o Update.AddToSetWrapped para adicionar divisões, e isso funciona bem, mas eu também gostaria de poder atualizar documentos, dependendo do _id deles.
Por exemplo, se eu definir o seguinte método de atualização:
public void UpdateDivision(IDivision division)
{
var mongo = MongoServer.Create(_connectionString);
var database = mongo.GetDatabase(_databaseName);
var query = Query.EQ("_id", division.CompanyId);
var update = Update.AddToSetWrapped("Divisions", division);
database.GetCollection<Company>("Company")
.Update(query, update, UpdateFlags.Upsert, SafeMode.True);
}
e chame assim:
var division = GetDivisionById(1);
division.Name = "New Name";
UpdateDivision(division);
Em seguida, uma nova instância de Division será adicionada ao conjunto, porque, embora o "_id" ainda seja 1, o Nome é diferente e, portanto, é um documento exclusivo.
Então, o que há uma boa maneira de atualizar um documento incorporado inteiro?
Até encontrar uma solução melhor, vou primeiro$pull
a divisão original e depois$addToSet
com a divisão modificada. Isso funciona, mas obviamente não é o ideal, pois realiza duas atualizações separadas.