Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Actualiza muchos

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 varios documentos.

  • UpdateManyAsync(): la versión asíncrona de UpdateMany().

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 múltiples sobrecargas. Los ejemplos en esta guía muestran solo una definición de cada método. Para obtener más información sobre las sobrecargas disponibles, consulta 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 obtener más información sobre la serialización personalizada, consulta 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.

Los métodos UpdateMany() y UpdateManyAsync() aceptan los siguientes parámetros:

Parameter
Descripción

filter

Una instancia de la clase FilterDefinition que especifica los documentos a actualizar. Para aprender cómo crear un filtro de query, consulte Crear un filtro de query.

Tipo de dato: FilterDefinition

update

Una instancia de la clase UpdateDefinition. Este objeto especifica el tipo de operación de actualización, los campos a actualizar y el nuevo valor para cada campo. Para saber cómo crear un UpdateDefinition objeto, consulta Actualizar campos en muchos documentos y Actualizar arreglos en muchos documentos.

Tipo de dato: UpdateDefinition<TDocument>

options

opcional. Una instancia de la clase UpdateOptions que especifica la configuración para la operación de actualización. El valor por defecto es null. Para ver una lista de las opciones disponibles, consulta Opciones de configuración.

Tipo de dato: UpdateOptions

cancellationToken

Opcional. Un token que puedes usar para cancelar la operación.

Tipo de dato: CancellationToken

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.

El método Builders.Update.Combine() te permite combinar múltiples objetos UpdateDefinition. Este método acepta el siguiente parámetro:

Parameter
Descripción

updates

Un arreglo de definiciones de actualización para combinar.

Tipo de dato: UpdateDefinition<TDocument>[]

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);

Puedeunir una secuencia de operaciones de actualización en una única canalización 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

pipeline

Una instancia de PipelineDefinition que representa la pipeline de actualización. Para crear un objeto PipelineDefinition, crea un documento BSON para cada operación de actualización que quieras realizar y luego pásalos al método PipelineDefinition.Create().

Tipo de dato: PipelineDefinition<TDocument, TDocument>

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 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.

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

ArrayFilters

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>

BypassDocumentValidation

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: bool?

Collation

Especifica el tipo de intercalación de idioma que se usará al ordenar los resultados. Consulte la sección Intercalación de esta página para obtener más información.

Tipo de dato: Intercalación

Comment

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

Hint

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

IsUpsert

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: bool

Sort

Determina qué documento actualiza la operación si la consulta 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, debe crear una instancia UpdateOptions<T> que utilice un tipo genérico que modele sus datos, como se muestra en el siguiente código:

var options = new UpdateOptions<Restaurant>
{
Sort = Builders<Restaurant>.Sort.Ascending(r => r.Name)
};

Tipo de dato: SortDefinition<T>

Let

Obtiene o establece el documento let. Para obtener más información, consulta el manual de MongoDB Server.

Tipo de dato: Documento Bson

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

locale

Specifies the International Components for Unicode (ICU) locale. For a list of supported locales, see Collation Locales and Default Parameters in the MongoDB Server Manual.

If you want to use simple binary comparison, use the Collation.Simple static property to return a Collation object with the locale set to "simple".
Data Type: string

Locale

caseLevel

(Optional) Specifies whether to include case comparison.

When this argument is true, the driver's behavior depends on the value of the strength argument:

- If strength is CollationStrength.Primary, the driver compares base characters and case.
- If strength is CollationStrength.Secondary, the driver compares base characters, diacritics, other secondary differences, and case.
- If strength is any other value, this argument is ignored.

When this argument is false, the driver doesn't include case comparison at strength level Primary or Secondary.

Data Type: boolean
Default: false

CaseLevel

caseFirst

(Optional) Specifies the sort order of case differences during tertiary level comparisons.

Default: CollationCaseFirst.Off

CaseFirst

strength

(Optional) Specifies the level of comparison to perform, as defined in the ICU documentation.

Default: CollationStrength.Tertiary

Strength

numericOrdering

(Optional) Specifies whether the driver compares numeric strings as numbers.

If this argument is true, the driver compares numeric strings as numbers. For example, when comparing the strings "10" and "2", the driver treats the values as 10 and 2, and finds 10 to be greater.

If this argument is false or excluded, the driver compares numeric strings as strings. For example, when comparing the strings "10" and "2", the driver compares one character at a time. Because "1" is less than "2", the driver finds "10" to be less than "2".

For more information, see Collation Restrictions in the MongoDB Server manual.

Data Type: boolean
Default: false

NumericOrdering

alternate

(Optional) Specifies whether the driver considers whitespace and punctuation as base characters for purposes of comparison.

Default: CollationAlternate.NonIgnorable (spaces and punctuation are considered base characters)

Alternate

maxVariable

(Optional) Specifies which characters the driver considers ignorable when the alternate argument is CollationAlternate.Shifted.

Default: CollationMaxVariable.Punctuation (the driver ignores punctuation and spaces)

MaxVariable

normalization

(Optional) Specifies whether the driver normalizes text as needed.

Most text doesn't require normalization. For more information about normalization, see the ICU documentation.

Data Type: boolean
Default: false

Normalization

backwards

(Optional) Specifies whether strings containing diacritics sort from the back of the string to the front.

Data Type: boolean
Default: false

Backwards

Más información sobre la intercalación en la página Intercalación en el manual de MongoDB Server.

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

IsAcknowledged

Indica si la operación de actualización fue reconocida por MongoDB.

Tipo de dato: bool

IsModifiedCountAvailable

Indica si puede leer la cantidad de registros de actualización en el UpdateResult.

Tipo de dato: bool

MatchedCount

La cantidad de documentos que coincidieron con el filtro de query, independientemente de si uno fue actualizado.

Tipo de dato: long

ModifiedCount

El número de documentos actualizados por la operación de actualización.

Tipo de dato: long

UpsertedId

El ID del documento que se insertó en la base de datos, si el controlador realizó una inserción.

Tipo de dato: BsonValue

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, haz clic en Open Interactive Tutorial botón en la parte superior de la página. Para expandir 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.

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:

Volver

Arreglos

En esta página