Soy nuevo en mongoDb y trato de hacer una operación CRUD usando mongoDb y Asp.net Core web api. Mi problema es que todo el objeto al tiempo se actualiza. Quiero actualizar campos específicos que envío en web api.
Ejemplo :
BusinessUnit oBU = new BusinessUnit(){ Id = "586e262268d90b290001b46e", Name = "BU_Name", Address = "my_Add" };Ahora quiero actualizar solo la dirección a "my_New_add" y quiero hacer el siguiente objeto:
BusinessUnit oBU = new BusinessUnit(){ Id = "586e262268d90b290001b46e", Name = "BU_Name", Address = "my_New_Add" };Llamada API: http://localhost:88786/api/BusinessUnit/586e262268d90b290001b46e
cuerpo: {"Id": "586e262268d90b290001b46e", "Dirección": "my_New_add"}
Pero todo el tiempo actualiza el objeto completo. ¿Cómo puedo resolverlo?
A continuación se muestra mi código:
Código del controlador:
[HttpPut("{id}")] public void Put(string id, [FromBody]BusinessUnit businessUnit) { _businessUnitRepository.UpdateBusinessUnit(id, businessUnit); }Código de repositorio:
public async Task<ReplaceOneResult> UpdateBusinessUnit(string id, BusinessUnit businessUnit) { return await _context.BusinessUnits.ReplaceOneAsync(doc => doc.Id == id, businessUnit); }En realidad, quiero hacer la siguiente consulta (sé que mongodb es noSql, pero para aclarar mi pregunta, escribo debajo de la consulta sql)
ACTUALIZAR BusinessUnit Set Address = "my_New_add" DONDE Id = "586e262268d90b290001b46e"
Gracias por adelantado.
BuscarUnoYReemplazar
Un solo documento se puede reemplazar atómicamente usando los métodos
FindOneAndReplaceoFindOneAndReplaceAsync.
var filter = new BsonDocument("FirstName", "Jack"); var update = Builders<BsonDocument>.Update.Set("FirstName", "John"); var result = collection.FindOneAndUpdate(filter, update); if (result != null) { Assert(result["FirstName"] == "Jack"); }Lo anterior encontrará un documento donde FirstName es Jack y establecerá su campo FirstName en John. Luego devolverá el documento que fue reemplazado.
Por favor vea la documentación aquí
Utilice este método:
public ToDoItem Update(ToDoItem toDoItem) { yourCollection.ReplaceOne(item => item.Id == toDoItem.Id, toDoItem); return toDoItem; }