Overview
En esta guía, puedes aprender a usar el controlador MongoDB .NET/C# para actualizar valores en múltiples documentos.
El controlador .NET/C# proporciona los siguientes métodos para actualizar valores:
UpdateMany(): Actualiza uno o más campos en múltiples 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 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 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.
Métodos y parámetros
Los métodos UpdateMany() y UpdateManyAsync() aceptan los siguientes parámetros:
Parameter | Descripción |
|---|---|
| Una instancia de la clase Tipo de dato: FilterDefinition |
| Una instancia de la clase Tipo de dato: UpdateDefinition<TDocument> |
| opcional. Una instancia de la clase Tipo de dato: UpdateOptions |
| opcional. Un token que puedes usar para cancelar la operación. Tipo de datos: |
Actualice 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 única llamada de método.
Definiciones de actualización combinada
El método Builders.Update.Combine() te permite combinar múltiples objetos UpdateDefinition. Este método acepta el siguiente parámetro:
Parameter | Descripción |
|---|---|
| Un arreglo 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 método Combine() 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 pipeline
Puedes unir una secuencia de operaciones de actualización en una sola pipeline de agregación.
Para crear un pipeline de actualización, llama al método Builders.Update.Pipeline(). Este método acepta el siguiente parámetro:
Parameter | Descripción |
|---|---|
| Una instancia de Tipo de dato: |
El método Pipeline() devuelve un solo objeto UpdateDefinition que define múltiples etapas de agregación.
El siguiente ejemplo de código utiliza el método Pipeline() 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 pipelines de actualización no admiten todas las operaciones de actualización, pero sí admiten 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 admitidas por las pipelines, consulta Actualizaciones con pipeline 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 utilizar este argumento para configurar la operación de actualizar.
La clase UpdateOptions contiene las siguientes propiedades:
Propiedad | Descripción | ||||
|---|---|---|---|---|---|
| Especifica qué elementos del arreglo se deben modificar para una operación de actualización en un campo de arreglo. Para obtener más información, consulta el manual de MongoDB Server. Tipo de dato: IEnumerable<ArrayFilterDefinition> | ||||
| Especifica si la operación de actualización omite la validación de documentos. Esto te permite actualizar documentos que no cumplen los requisitos de validación del esquema, si existieran. Consulta el manual de MongoDB Server para obtener más información sobre la validación de esquemas. Tipo de dato: | ||||
| Especifica el tipo de intercalación lingüística a utilizar al ordenar los resultados. Consulta la sección intercalación en esta página para obtener más información. Tipo de dato: Intercalación | ||||
| Obtiene o establece el comentario proporcionado por el usuario para la operación. Para obtener más información, consulta el manual de MongoDB Server. Tipo de dato: BsonValue | ||||
| Obtiene o establece el índice que se utilizará para buscar documentos. Para obtener más información, consulta el manual de MongoDB Server. Tipo de dato: BsonValue | ||||
| Especifica si la operación de actualizar realiza una operación de inserción si ningún documento coincide con el filtro de query. Para obtener más información, consulta el manual de MongoDB Server. Tipo de dato: | ||||
| Determina qué documento actualizará la operación si la query selecciona varios documentos, ya que la operación de actualización actualiza el primer documento en el orden de clasificación especificado. Para configurar esta opción, debes instanciar una instancia de Tipo de dato: | ||||
| Obtiene o establece el documento let. Para obtener más información, consulta el manual de MongoDB Server. Tipo de dato: BsonDocument |
Intercalación
Para configurar la intercalación para tu operación, crea una instancia de la clase intercalación.
La siguiente tabla describe los parámetros que acepta el constructor Collation. También enumera la propiedad de clase correspondiente que se puede usar para leer el valor de cada configuración.
Parameter | Descripción | Propiedad de clase |
|---|---|---|
| Especifica la configuración regional de Componentes Internacionales para Unicode (ICU). Para obtener una lista de las configuraciones regionales compatibles, consulte Configuraciones regionales de intercalación y parámetros predeterminados en el Manual del servidor MongoDB. |
|
| (Opcional) Especifica si se debe incluir la comparación de mayúsculas y minúsculas. |
|
| (Opcional) Especifica el orden de clasificación de las diferencias de mayúsculas y minúsculas durante las comparaciones de nivel terciario. |
|
| (Opcional) Especifica el nivel de comparación a realizar, tal como se define en la documentación de la UCI. |
|
| (Opcional) Especifica si el controlador compara las cadenas numéricas como números. |
|
| (Opcional) Especifica si el controlador considera los espacios en blanco y la puntuación como caracteres base para fines de comparación. |
|
| (Opcional) Especifica qué caracteres considera el controlador como ignorables cuando el |
|
| (Opcional) Especifica si el controlador normaliza el texto según sea necesario. |
|
| (Opcional) Especifica si las cadenas que contienen diacríticos se ordenan desde el final de la cadena hacia el principio. |
|
Más información sobre la intercalación en la página Intercalación en el manual de MongoDB Server.
Valor de retorno
El método UpdateMany() devuelve un UpdateResult, y el método UpdateManyAsync() devuelve un objeto Task<UpdateResult>. La clase UpdateResult contiene las siguientes propiedades:
Propiedad | Descripción |
|---|---|
| Indica si la operación de actualización fue reconocida por MongoDB. Tipo de dato: |
| Indica si puede leer la cantidad de registros de actualización en el Tipo de dato: |
| La cantidad de documentos que coincidieron con el filtro de query, independientemente de si uno fue actualizado. Tipo de dato: |
| El número de documentos actualizados por la operación de actualización. Tipo de dato: |
| El ID del documento que fue insertado o actualizado en la base de datos, si el driver realizó una actualización o inserción. Tipo de dato: BsonValue |
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 botón Open Interactive Tutorial en la parte superior de la página. Para ampliar el laboratorio a un formato de 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 los siguientes ejemplos de uso:
Para obtener más información sobre cómo crear filtros de query, consulta la guía Crear un filtro de query.
Documentación de la API
Para obtener más información sobre cualquiera de los métodos o tipos discutidos en esta guía, consulta la siguiente documentación de la API: