Docs Menu
Docs Home
/ /

Actualizar campos en un solo documento

En esta página, puede aprender a usar el controlador MongoDB .NET/C# para actualizar campos en un documento 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 una página.

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.

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; }
[BsonElement("restaurant_id")]
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; }
[BsonElement("coord")]
public double[] Coordinates { get; set; }
public string Street { get; set; }
[BsonElement("zipcode")]
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 es de los conjuntos de datos de muestra proporcionados por Atlas. Consulte Primeros pasos con el controlador .NET/C# para aprender a crear un clúster gratuito de MongoDB y cargar estos datos de muestra.

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

field

Expresión que especifica el campo que se va a aumentar.

Tipo de dato: Expression<Func<TDocument, TField>>

value

La cantidad para incrementar el campo.

Tipo de dato: TField

El siguiente ejemplo de código usa el método Inc() para incrementar el valor de Score en 2 en el primer objeto GradeEntry del arreglo de Grades en el documento correspondiente:

var filter = Builders<Restaurant>.Filter.Eq("name", "Casa Bella");
var update = Builders<Restaurant>.Update
.Inc(restaurant => restaurant.Grades[0].Score, 2);
var result = _restaurantsCollection.UpdateOne(filter, update);
var filter = Builders<Restaurant>.Filter.Eq("name", "Casa Bella");
var update = Builders<Restaurant>.Update
.Inc(restaurant => restaurant.Grades[0].Score, 2);
var result = await _restaurantsCollection.UpdateOneAsync(filter, update);

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

field

Una expresión que especifica el campo que se va a actualizar.

Tipo de dato: Expression<Func<TDocument, TField>>

value

La cantidad por la que se multiplica el campo.

Tipo de dato: TField

El siguiente ejemplo de código usa el método Mul() para multiplicar el valor Score por 1.25 en el primer objeto GradeEntry del arreglo Grades en el documento coincidente:

var filter = Builders<Restaurant>.Filter.Eq("name", "Casa Bella");
var update = Builders<Restaurant>.Update
.Mul(restaurant => restaurant.Grades[0].Score, 1.25f);
var result = _restaurantsCollection.UpdateOne(filter, update);
var filter = Builders<Restaurant>.Filter.Eq("name", "Casa Bella");
var update = Builders<Restaurant>.Update
.Mul(restaurant => restaurant.Grades[0].Score, 1.25f);
var result = await _restaurantsCollection.UpdateOneAsync(filter, update);

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

field

Una expresión que especifica el campo que se va a renombrar.

Tipo de dato: Expression<Func<TDocument, TField>>

newName

El nuevo nombre del campo.

Tipo de dato: string

En el siguiente ejemplo de código, se utiliza el método Rename() para renombrar el campo Address a location en el documento correspondiente:

var filter = Builders<Restaurant>.Filter.Eq("name", "Casa Bella");
var update = Builders<Restaurant>.Update
.Rename(restaurant => restaurant.Address, "location");
var result = _restaurantsCollection.UpdateOne(filter, update);
var filter = Builders<Restaurant>.Filter.Eq("name", "Casa Bella");
var update = Builders<Restaurant>.Update
.Rename(restaurant => restaurant.Address, "location");
var result = await _restaurantsCollection.UpdateOneAsync(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.

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

field

Una expresión que especifica el campo que se va a actualizar.

Tipo de dato: Expression<Func<TDocument, TField>>

value

El valor al que se establecerá el campo.

Tipo de dato: TField

En el siguiente ejemplo de código, se utiliza el método Set() para renombrar el campo recommended a true en el documento correspondiente:

var filter = Builders<Restaurant>.Filter.Eq("name", "Casa Bella");
var update = Builders<Restaurant>.Update
.Set("recommended", true);
var result = _restaurantsCollection.UpdateOne(filter, update);
var filter = Builders<Restaurant>.Filter.Eq("name", "Casa Bella");
var update = Builders<Restaurant>.Update
.Set("recommended", true);
var result = await _restaurantsCollection.UpdateOneAsync(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.

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

field

Una expresión que especifica el campo que se va a actualizar.

Tipo de dato: Expression<Func<TDocument, TField>>

value

El valor al que se establecerá el campo.

Tipo de dato: TField

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

field

Una expresión que especifica el campo que se va a actualizar.

Tipo de dato: Expression<Func<TDocument, TField>>

value

El valor al que se establecerá el campo.

Tipo de dato: TField

El siguiente ejemplo de código utiliza el método Max() para establecer el campo Score del primer objeto GradeEntry al mayor de 20 y el valor actual en el documento correspondiente:

var filter = Builders<Restaurant>.Filter.Eq("name", "Casa Bella");
var update = Builders<Restaurant>.Update
.Max(restaurant => restaurant.Grades[0].Score, 20);
var result = _restaurantsCollection.UpdateOne(filter, update);
var filter = Builders<Restaurant>.Filter.Eq("name", "Casa Bella");
var update = Builders<Restaurant>.Update
.Max(restaurant => restaurant.Grades[0].Score, 20);
var result = await _restaurantsCollection.UpdateOneAsync(filter, update);

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

field

Una expresión que especifica el campo que se va a actualizar.

Tipo de dato: Expression<Func<TDocument, TField>>

value

El valor al que se establecerá el campo.

Tipo de dato: TField

El siguiente ejemplo de código utiliza el método SetOnInsert() para establecer el campo recommended a true en el documento correspondiente:

var filter = Builders<Restaurant>.Filter.Eq("name", "Patty's Pies");
var update = Builders<Restaurant>.Update
.SetOnInsert("recommended", true);
var result = _restaurantsCollection.UpdateOne(
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.UpdateOneAsync(
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 aprender más sobre cómo insertar o actualizar documentos, consulta Opciones de configuración en la guía Actualiza uno.

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

field

Una expresión que especifica el campo que se va a actualizar.

Tipo de dato: Expression<Func<TDocument, TField>>

type

El formato de la fecha y la hora, definido en el enumerador UpdateDefinitionCurrentDateType. El valor por defecto es null.

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 el documento correspondiente:

var filter = Builders<Restaurant>.Filter.Eq("name", "Casa Bella");
var update = Builders<Restaurant>.Update
.CurrentDate(restaurant => restaurant.Grades[0].Date);
var result = _restaurantsCollection.UpdateOne(filter, update);
var filter = Builders<Restaurant>.Filter.Eq("name", "Casa Bella");
var update = Builders<Restaurant>.Update
.CurrentDate(restaurant => restaurant.Grades[0].Date);
var result = await _restaurantsCollection.UpdateOneAsync(filter, update);

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

field

Una expresión que especifica el campo a remover.

Tipo de dato: Expression<Func<TDocument, TField>>

El siguiente ejemplo de código usa el método Unset() para remover el campo Cuisine en el documento correspondiente:

var filter = Builders<Restaurant>.Filter.Eq("name", "Casa Bella");
var update = Builders<Restaurant>.Update
.Unset(restaurant => restaurant.Cuisine);
var result = _restaurantsCollection.UpdateOne(filter, update);
var filter = Builders<Restaurant>.Filter.Eq("name", "Casa Bella");
var update = Builders<Restaurant>.Update
.Unset(restaurant => restaurant.Cuisine);
var result = await _restaurantsCollection.UpdateOneAsync(filter, update);

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:

Volver

Actualizar un documento

En esta página