Overview
En esta guía, puede aprender a utilizar el controlador MongoDB .NET/C# para actualizar valores en varios documentos.
El controlador .NET/C# proporciona los siguientes métodos para actualizar valores:
UpdateMany():Actualiza uno o más campos en varios documentos.UpdateManyAsync(): la versión asíncrona deUpdateMany().
Las siguientes secciones describen estos métodos con más detalle.
Nota
Sobrecargas de métodos
Muchos de los métodos de esta página tienen múltiples 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, consulte 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 obtener más información sobre la serialización personalizada, consulte 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.
Métodos y parámetros
Los métodos UpdateMany() y UpdateManyAsync() aceptan los siguientes parámetros:
Parameter | Descripción |
|---|---|
| Una instancia de la Tipo de dato: FilterDefinition |
| Una instancia de la Tipo de dato: UpdateDefinition<TDocument> |
| Opcional. Una instancia de la Tipo de dato: UpdateOptions |
| Opcional. Un token que puedes usar para cancelar la operación. Tipo de dato: |
Actualizar varios valores
Los métodos UpdateMany() y UpdateManyAsync() solo aceptan un objeto UpdateDefinition cada uno. Las siguientes secciones describen cómo actualizar varios valores en una sola llamada al método.
Definiciones de actualización combinadas
El método Builders.Update.Combine() permite combinar varios objetos UpdateDefinition. Este método acepta el siguiente parámetro:
Parameter | Descripción |
|---|---|
| Una serie de definiciones de actualización para combinar. Tipo de dato: |
El método Combine() devuelve un único objeto UpdateDefinition que define múltiples operaciones de actualización.
El siguiente ejemplo de código utiliza el Combine() método para combinar una operación $set y una operación $unset:
var filter = Builders<Restaurant>.Filter .Eq("cuisine", "Pizza"); var combinedUpdate = Builders<Restaurant>.Update.Combine( Builders<Restaurant>.Update.Set("cuisine", "French"), Builders<Restaurant>.Update.Unset("borough") ); _restaurantsCollection.UpdateMany(filter, combinedUpdate);
var filter = Builders<Restaurant>.Filter .Eq("cuisine", "Pizza"); var combinedUpdate = Builders<Restaurant>.Update.Combine( Builders<Restaurant>.Update.Set("cuisine", "French"), Builders<Restaurant>.Update.Unset("borough") ); await _restaurantsCollection.UpdateManyAsync(filter, combinedUpdate);
Actualizar tuberías
Puedeunir una secuencia de operaciones de actualización en una única canalización de agregación.
Para crear una canalización de actualización, llame al método Builders.Update.Pipeline(). Este método acepta el siguiente parámetro:
Parameter | Descripción |
|---|---|
| Una instancia Tipo de dato: |
El método Pipeline() devuelve un único objeto UpdateDefinition que define múltiples etapas de agregación.
El siguiente ejemplo de código utiliza el Pipeline() método para combinar una operación $set y una operación $unset:
var filter = Builders<Restaurant>.Filter .Eq("cuisine", "Pizza"); var updatePipeline = Builders<Restaurant>.Update.Pipeline( PipelineDefinition<Restaurant, Restaurant>.Create( new BsonDocument("$set", new BsonDocument("cuisine", "French")), new BsonDocument("$unset", "borough") ) ); _restaurantsCollection.UpdateMany(filter, updatePipeline);
var filter = Builders<Restaurant>.Filter .Eq("cuisine", "Pizza"); var updatePipeline = Builders<Restaurant>.Update.Pipeline( PipelineDefinition<Restaurant, Restaurant>.Create( new BsonDocument("$set", new BsonDocument("cuisine", "French")), new BsonDocument("$unset", "borough") ) ); await _restaurantsCollection.UpdateManyAsync(filter, updatePipeline);
Nota
Operaciones no admitidas
Las canalizaciones de actualización no admiten todas las operaciones de actualización, pero sí ciertas etapas de agregación que no se encuentran en otras definiciones de actualización. Para obtener una lista de las operaciones de actualización compatibles con las canalizaciones, consulte Actualizaciones con canalización de agregación en el manual de MongoDB Server.
Opciones de configuración
Los métodos UpdateMany() y UpdateManyAsync() aceptan opcionalmente un objeto UpdateOptions como parámetro. Puede usar este argumento para configurar la operación de actualización.
La clase UpdateOptions contiene las siguientes propiedades:
Propiedad | Descripción |
|---|---|
| Especifica qué elementos de la matriz se modificarán para una operación de actualización en un campo de la matriz. Consulte el manual de MongoDB Server para obtener más información. |
| Especifica si la operación de actualización omite la validación de documentos. Esto permite actualizar documentos que no cumplen los requisitos de validación del esquema, si los hay. Consulte el manual de MongoDB Server para obtener más información sobre la validación del esquema. Tipo de dato: |
| Especifica el tipo de intercalación de idioma que se usará al ordenar los resultados. Consulte el manual de MongoDB Server para obtener más información sobre la intercalación. Tipo de dato: Intercalación |
| Obtiene o establece el comentario proporcionado por el usuario para la operación. Consulte el manual del servidor MongoDB para obtener más información. Tipo de dato: Valor de Bson |
| Obtiene o establece el índice que se usará para buscar documentos. Consulte el manual del servidor MongoDB para obtener más información. Tipo de dato: Valor de Bson |
| Especifica si la operación de actualización realiza una operación upsert si ningún documento coincide con el filtro de consulta. Consulte el manual del servidor MongoDB para obtener más información. Tipo de dato: |
| Obtiene o establece el documento let. Consulte el manual del servidor MongoDB para obtener más información. Tipo de dato: Documento Bson |
Valor de retorno
El método UpdateMany() devuelve un objeto UpdateResult y el método UpdateManyAsync() devuelve un objeto Task<UpdateResult>. La clase UpdateResult contiene las siguientes propiedades:
Propiedad | Descripción |
|---|---|
| Indica si MongoDB reconoció la operación de actualización. Tipo de dato: |
| Indica si puede leer el recuento de registros de actualización en Tipo de dato: |
| La cantidad de documentos que coincidieron con el filtro de consulta, independientemente de si se actualizó alguno. Tipo de dato: |
| El número de documentos actualizados por la operación de actualización. Tipo de dato: |
| El ID del documento que se insertó en la base de datos, si el controlador realizó una inserción. Tipo de dato: Valor de Bson |
Información Adicional
Esta página incluye un breve laboratorio interactivo que demuestra cómo modificar datos usando el método UpdateManyAsync(). Puede completar este laboratorio directamente en la ventana de su navegador sin instalar MongoDB o un editor de código.
Para iniciar el laboratorio, haga clic en el Open Interactive Tutorial Botón en la parte superior de la página. Para ampliar el laboratorio a pantalla completa, haga clic en el botón de pantalla completa (⛶) en la esquina superior derecha del panel del laboratorio.
Para ejemplos ejecutables de las operaciones de actualización, consulta la página Actualizar varios documentos.
Para obtener más información sobre cómo crear filtros de consulta, consulte la guía Especificar una consulta.
Documentación de la API
Para obtener más información sobre cualquiera de los métodos o tipos analizados en esta guía, consulte la siguiente documentación de API: