Overview
En esta página, puede aprender a usar el controlador MongoDB .NET/C# para actualizar campos en varios documentos MongoDB. Esta página describe cómo crear... UpdateDefinition<TDocument>
Objetos que especifican las operaciones de actualización que desea realizar en los campos. Puede pasar estos objetos a los métodos de actualización descritos en la Actualizar muchas páginas.
El controlador .NET/C# admite los operadores de actualización de campo descritos en
Manual del servidor MongoDB. Para especificar una operación de actualización, llame al método correspondiente desde la Builders.Update propiedad. Las siguientes secciones describen estos métodos con más detalle.
Nota
Sobrecargas de métodos
Muchos de los métodos en esta página tienen varias sobrecargas. Los ejemplos de esta guía muestran solo una definición de cada método. Para obtener más información sobre las sobrecargas disponibles, se puede consultar la documentación de la API.
Datos de muestra
Los ejemplos de esta guía utilizan la colección restaurants de la base de datos sample_restaurants. Los documentos de esta colección utilizan las siguientes clases Restaurant, Address y GradeEntry como modelos:
public class Restaurant { public ObjectId Id { get; set; } public string Name { get; set; } [] public string RestaurantId { get; set; } public string Cuisine { get; set; } public Address Address { get; set; } public string Borough { get; set; } public List<GradeEntry> Grades { get; set; } }
public class Address { public string Building { get; set; } [] public double[] Coordinates { get; set; } public string Street { get; set; } [] public string ZipCode { get; set; } }
public class GradeEntry { public DateTime Date { get; set; } public string Grade { get; set; } public float? Score { get; set; } }
Nota
Los documentos de la colección restaurants utilizan la convención de nomenclatura snake-case. Los ejemplos de esta guía utilizan un ConventionPack para deserializar los campos de la colección en notación Pascal y asignarlos a las propiedades de la clase Restaurant.
Para aprender más sobre la serialización personalizada, consultar Serialización personalizada.
Esta colección proviene de los conjuntos de datos de muestra proporcionados por Atlas. Consulte la Guía de inicio rápido para aprender a crear un clúster gratuito de MongoDB y cargar estos datos de muestra.
Incrementar un valor
Para aumentar el valor de un campo en una cantidad específica, llama al método Builders.Update.Inc(). Este método acepta los siguientes parámetros:
Parameter | Descripción |
|---|---|
| Expresión que especifica el campo que se va a aumentar. Tipo de dato: |
| La cantidad para incrementar el campo. Tipo de dato: |
El siguiente ejemplo de código utiliza el método Inc() para incrementar el valor Score en 2 en el primer objeto GradeEntry del arreglo Grades en todos los documentos coincidentes:
var filter = Builders<Restaurant>.Filter.Eq("name", "Shake Shack"); var update = Builders<Restaurant>.Update .Inc(restaurant => restaurant.Grades[0].Score, 2); var result = _restaurantsCollection.UpdateMany(filter, update);
var filter = Builders<Restaurant>.Filter.Eq("name", "Shake Shack"); var update = Builders<Restaurant>.Update .Inc(restaurant => restaurant.Grades[0].Score, 2); var result = await _restaurantsCollection.UpdateManyAsync(filter, update);
Multiplicar un valor
Para multiplicar el valor de un campo por una cantidad específica, se debe llamar al método Builders.Update.Mul(). Este método toma los siguientes parámetros:
Parameter | Descripción |
|---|---|
| Una expresión que especifica el campo que se va a actualizar. Tipo de dato: |
| La cantidad por la que se multiplica el campo. Tipo de dato: |
El siguiente ejemplo de código utiliza el método Mul() para multiplicar el valor Score por 1.25 en el primer objeto GradeEntry de la matriz Grades en todos los documentos coincidentes:
var filter = Builders<Restaurant>.Filter.Eq("name", "Shake Shack"); var update = Builders<Restaurant>.Update .Mul(restaurant => restaurant.Grades[0].Score, 1.25f); var result = _restaurantsCollection.UpdateMany(filter, update);
var filter = Builders<Restaurant>.Filter.Eq("name", "Shake Shack"); var update = Builders<Restaurant>.Update .Mul(restaurant => restaurant.Grades[0].Score, 1.25f); var result = await _restaurantsCollection.UpdateManyAsync(filter, update);
Renombrar un campo
Para cambiar el nombre de un campo, se debe llamar al método Builders.Update.Rename(). Este método acepta los siguientes parámetros:
Parameter | Descripción |
|---|---|
| Una expresión que especifica el campo que se va a renombrar. Tipo de dato: |
| El nuevo nombre del campo. Tipo de dato: |
El siguiente ejemplo de código utiliza el método Rename() para cambiar el nombre del campo Address a location en todos los documentos coincidentes:
var filter = Builders<Restaurant>.Filter.Eq("name", "Shake Shack"); var update = Builders<Restaurant>.Update .Rename(restaurant => restaurant.Address, "location"); var result = _restaurantsCollection.UpdateMany(filter, update);
var filter = Builders<Restaurant>.Filter.Eq("name", "Shake Shack"); var update = Builders<Restaurant>.Update .Rename(restaurant => restaurant.Address, "location"); var result = await _restaurantsCollection.UpdateManyAsync(filter, update);
Nota
Los ejemplos de código anteriores usan el nombre de campo location porque coincide con el esquema de nomenclatura de los nombres de campo en MongoDB, no con los nombres de propiedad de la clase Restaurant.
Establece un valor
Para establecer el valor de un campo en un valor concreto, llama al método Builders.Update.Set(). Este método acepta los siguientes parámetros:
Parameter | Descripción |
|---|---|
| Una expresión que especifica el campo que se va a actualizar. Tipo de dato: |
| El valor al que se establecerá el campo. Tipo de dato: |
El siguiente ejemplo de código utiliza el método Set() para cambiar el nombre del campo recommended a true en todos los documentos coincidentes:
var filter = Builders<Restaurant>.Filter.Eq("name", "Shake Shack"); var update = Builders<Restaurant>.Update .Set("recommended", true); var result = _restaurantsCollection.UpdateMany(filter, update);
var filter = Builders<Restaurant>.Filter.Eq("name", "Shake Shack"); var update = Builders<Restaurant>.Update .Set("recommended", true); var result = await _restaurantsCollection.UpdateManyAsync(filter, update);
Nota
Los ejemplos de código anteriores usan el nombre de campo recommended porque coincide con el esquema de nomenclatura de los nombres de campo en MongoDB, no con los nombres de propiedad de la clase Restaurant.
Establecido por comparación
Para actualizar el valor del campo a un valor especificado, pero solo si el valor especificado es mayor que el valor actual del campo, se debe llamar al método Builders.Update.Max(). Este método acepta los siguientes parámetros:
Parameter | Descripción |
|---|---|
| Una expresión que especifica el campo que se va a actualizar. Tipo de dato: |
| El valor al que se establecerá el campo. Tipo de dato: |
Para actualizar el valor del campo a un valor especificado, pero solo si el valor especificado es menor que el valor actual del campo, se debe llamar al método Builders.Update.Min(). Este método toma los siguientes parámetros:
Parameter | Descripción |
|---|---|
| Una expresión que especifica el campo que se va a actualizar. Tipo de dato: |
| El valor al que se establecerá el campo. Tipo de dato: |
El siguiente ejemplo de código utiliza el método Max() para establecer el campo Score del primer objeto GradeEntry en el mayor de 20 y el valor actual en todos los documentos coincidentes:
var filter = Builders<Restaurant>.Filter.Eq("name", "Shake Shack"); var update = Builders<Restaurant>.Update .Max(restaurant => restaurant.Grades[0].Score, 20); var result = _restaurantsCollection.UpdateMany(filter, update);
var filter = Builders<Restaurant>.Filter.Eq("name", "Shake Shack"); var update = Builders<Restaurant>.Update .Max(restaurant => restaurant.Grades[0].Score, 20); var result = await _restaurantsCollection.UpdateManyAsync(filter, update);
Configurar al insertar
Para establecer el valor de un campo solo si el documento se insertó en la misma operación, llama al método Builders.Update.SetOnInsert(). Este método acepta los siguientes parámetros:
Parameter | Descripción |
|---|---|
| Una expresión que especifica el campo que se va a actualizar. Tipo de dato: |
| El valor al que se establecerá el campo. Tipo de dato: |
El siguiente ejemplo de código utiliza el método SetOnInsert() para establecer el campo recommended en true en todos los documentos coincidentes:
var filter = Builders<Restaurant>.Filter.Eq("name", "Patty's Pies"); var update = Builders<Restaurant>.Update .SetOnInsert("recommended", true); var result = _restaurantsCollection.UpdateMany( filter, update, new UpdateOptions { IsUpsert = true } );
var filter = Builders<Restaurant>.Filter.Eq("name", "Patty's Pies"); var update = Builders<Restaurant>.Update .SetOnInsert("recommended", true); var result = await _restaurantsCollection.UpdateManyAsync( filter, update, new UpdateOptions { IsUpsert = true } );
Nota
Los ejemplos de código anteriores usan el nombre de campo recommended porque coincide con el esquema de nomenclatura de los nombres de campo en MongoDB, no con los nombres de propiedad de la clase Restaurant.
Para obtener más información sobre la actualización de documentos, consulte Opciones de configuración en la guía Actualizar Muchos.
Establece la fecha actual
Para establecer el valor de un campo en la fecha y hora actuales, se debe llamar al método Builders.Update.CurrentDate(). Este método acepta los siguientes parámetros:
Parameter | Descripción |
|---|---|
| Una expresión que especifica el campo que se va a actualizar. Tipo de dato: |
| El formato de la fecha y la hora, definido en el enumerador Tipo de dato: UpdateDefinitionCurrentDateType? |
El siguiente ejemplo de código utiliza el método CurrentDate() para actualizar el campo Date del primer objeto GradeEntry a la fecha actual en todos los documentos coincidentes:
var filter = Builders<Restaurant>.Filter.Eq("name", "Shake Shack"); var update = Builders<Restaurant>.Update .CurrentDate(restaurant => restaurant.Grades[0].Date); var result = _restaurantsCollection.UpdateMany(filter, update);
var filter = Builders<Restaurant>.Filter.Eq("name", "Shake Shack"); var update = Builders<Restaurant>.Update .CurrentDate(restaurant => restaurant.Grades[0].Date); var result = await _restaurantsCollection.UpdateManyAsync(filter, update);
Quita un campo
Para remover un campo de un documento, se debe llamar al método Builders.Update.Unset(). Este método acepta el siguiente parámetro:
Parameter | Descripción |
|---|---|
| Una expresión que especifica el campo a remover. Tipo de dato: |
El siguiente ejemplo de código utiliza el método Unset() para eliminar el campo Cuisine en todos los documentos coincidentes:
var filter = Builders<Restaurant>.Filter.Eq("name", "Shake Shack"); var update = Builders<Restaurant>.Update .Unset(restaurant => restaurant.Cuisine); var result = _restaurantsCollection.UpdateMany(filter, update);
var filter = Builders<Restaurant>.Filter.Eq("name", "Shake Shack"); var update = Builders<Restaurant>.Update .Unset(restaurant => restaurant.Cuisine); var result = await _restaurantsCollection.UpdateManyAsync(filter, update);
Documentación de la API
Para obtener más información sobre cualquiera de los métodos que se analizan en esta guía, se debe consultar la siguiente documentación de la API: