Overview
En esta guía, puede aprender cómo realizar múltiples operaciones de escritura en una sola llamada de base de datos mediante operaciones de escritura masiva.
Considera un escenario en el que quieres insertar un documento, actualizar varios otros documentos y luego borrar un documento. Si utiliza métodos individuales, cada operación requiere su propia llamada a la base de datos.
Al usar una operación de escritura masiva, puede realizar varias operaciones de escritura con menos llamadas a la base de datos. Puede realizar operaciones de escritura masiva en los siguientes niveles:
Colección: Puedes utilizar la
IMongoCollection.BulkWrite()o el métodoIMongoCollection.BulkWriteAsync()para realizar operaciones de escritura masiva en una sola colección. Estos métodos realizan una llamada a la base de datos para cada tipo de operación de escritura. Por ejemplo, los métodos realizan varias operaciones de actualización en una sola llamada, pero realizan dos llamadas independientes a la base de datos para una operación de inserción y una de reemplazo.Cliente: Si su aplicación se conecta a MongoDB Server versión 8.0 o posterior, puede usar el
IMongoClient.BulkWrite()IMongoClient.BulkWriteAsync()método o para realizar operaciones de escritura masiva en varias colecciones y bases de datos del mismo clúster. Este método realiza todas las operaciones de escritura en una sola llamada a la base de datos.
Datos de muestra
Los ejemplos de esta guía utilizan las colecciones y de los sample_restaurants.restaurants sample_mflix.movies conjuntos de datos de ejemplo de Atlas. Para aprender a crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de ejemplo, consulte la guía de introducción a MongoDB.
Tip
Operaciones de escritura masiva con POCO
Los ejemplos de esta guía utilizan el tipo BsonDocument para el tipo TDocument en todas las clases genéricas. También puede usar un objeto CLR simple (POCO) para estas clases. Para ello, debe definir una clase que represente los documentos de su colección. La clase debe tener propiedades que coincidan con los campos de sus documentos. Para obtener más información, consulte POCOs.
Colección Escritura masiva
Las operaciones de escritura masiva contienen una o más operaciones de escritura. Para cada operación de escritura que desee realizar, cree una instancia de una de las siguientes clases WriteModel<TDocument>:
DeleteManyModel<TDocument>DeleteOneModel<TDocument>InsertOneModel<TDocument>ReplaceOneModel<TDocument>UpdateManyModel<TDocument>UpdateOneModel<TDocument>
Las siguientes secciones muestran cómo crear y usar instancias de las clases anteriores para realizar la operación de escritura correspondiente en una operación de escritura masiva. La sección "Realizar la operación masiva" muestra cómo pasar una lista de modelos al BulkWrite() BulkWriteAsync() método o para realizar la operación masiva.
Operaciones de inserción
Para realizar una operación de inserción, cree una instancia InsertOneModel<TDocument> y especifique el documento que desea insertar.
El siguiente ejemplo crea una instancia de la clase InsertOneModel<BsonDocument>. Esta instancia indica al controlador que inserte un documento cuyo campo "name" es "Mongo's Deli" en la colección restaurants.
var insertOneModel = new InsertOneModel<BsonDocument>( new BsonDocument{ { "name", "Mongo's Deli" }, { "cuisine", "Sandwiches" }, { "borough", "Manhattan" }, { "restaurant_id", "1234" } } );
Para insertar varios documentos, cree una instancia de InsertOneModel<TDocument> para cada documento.
Importante
Error de clave duplicada
Al realizar una operación masiva, el InsertOneModel<TDocument> no puede insertar un documento con un _id ya existente en la colección. En este caso, el controlador lanza un MongoBulkWriteException.
Operaciones de actualizar
Para actualizar un solo documento, cree un instancia de UpdateOneModel<TDocument> y pase los siguientes argumentos:
Filtro de consulta que especifica los criterios utilizados para buscar documentos en su colección. Para obtener más información sobre cómo especificar una consulta, consulte "Operadores de consulta y proyección" en el manual de MongoDB Server.
Documento de actualización que describe la actualización a realizar. Para obtener más información sobre cómo especificar una actualización, consulte "Operadores de actualización" en el manual de MongoDB Server.
Una UpdateOneModel<TDocument> instancia especifica una actualización para el primer documento que coincide con su filtro de consulta.
En el siguiente ejemplo de código, el objeto UpdateOneModel<BsonDocument> representa una operación de actualización en la colección restaurants. La operación busca el primer documento de la colección cuyo valor del campo name sea "Mongo's Deli". A continuación, actualiza el valor del campo cuisine del documento coincidente a "Sandwiches and Salads".
var updateOneModel = new UpdateOneModel<BsonDocument>( Builders<BsonDocument>.Filter.Eq("name", "Mongo's Deli"), Builders<BsonDocument>.Update.Set("cuisine", "Sandwiches and Salads") );
Para actualizar varios documentos, cree una instancia de UpdateManyModel<TDocument> y pase los mismos argumentos que UpdateOneModel<TDocument> para. La UpdateManyModel<TDocument> clase especifica las actualizaciones para todos los documentos que coinciden con su filtro de consulta.
En el siguiente ejemplo de código, el objeto UpdateManyModel<BsonDocument> representa una operación de actualización en la colección restaurants. La operación busca todos los documentos de la colección cuyo valor del campo name sea "Mongo's Deli". A continuación, actualiza el valor del campo cuisine a "Sandwiches and Salads".
var updateManyModel = new UpdateManyModel<BsonDocument>( Builders<BsonDocument>.Filter.Eq("name", "Mongo's Deli"), Builders<BsonDocument>.Update.Set("cuisine", "Sandwiches and Salads") );
Reemplazar operaciones
Una operación de reemplazo elimina todos los campos y valores de un documento específico y los reemplaza con los nuevos campos y valores que usted especifique. Para realizar una operación de reemplazo, cree una instancia de ReplaceOneModel<TDocument> y pase un filtro de consulta y los campos y valores con los que desea reemplazar el documento coincidente.
En el siguiente ejemplo, el objeto ReplaceOneModel<BsonDocument> representa una operación de reemplazo en la colección restaurants. La operación busca el documento de la colección cuyo valor del campo restaurant_id es "1234". A continuación, elimina todos los campos excepto _id de este documento y establece nuevos valores en los campos name, cuisine, borough y restaurant_id.
var replaceOneModel = new ReplaceOneModel<BsonDocument>( Builders<BsonDocument>.Filter.Eq("restaurant_id", "1234"), new BsonDocument{ { "name", "Mongo's Pizza" }, { "cuisine", "Pizza" }, { "borough", "Brooklyn" }, { "restaurant_id", "5678" } } );
Para reemplazar varios documentos, debe crear una instancia de ReplaceOneModel<TDocument> para cada documento.
Operaciones de borrar
Para borrar un documento, crea una instancia de DeleteOneModel<TDocument> y pasa un filtro de query que especifique el documento que deseas borrar. Una instancia DeleteOneModel<TDocument> proporciona instrucciones para eliminar solo el primer documento que coincida con tu filtro de query.
En el siguiente ejemplo de código, el objeto DeleteOneModel<BsonDocument> representa una operación de eliminación en la colección restaurants. La operación busca y elimina el primer documento cuyo valor del campo restaurant_id sea "5678".
var deleteOneModel = new DeleteOneModel<BsonDocument>( Builders<BsonDocument>.Filter.Eq("restaurant_id", "5678") );
Para eliminar varios documentos, cree una instancia de DeleteManyModel<TDocument> y utilice un filtro de consulta que especifique los documentos que desea eliminar. Una instancia de DeleteManyModel<TDocument> proporciona instrucciones para eliminar todos los documentos que coincidan con su filtro de consulta.
En el siguiente ejemplo de código, el objeto DeleteManyModel<BsonDocument> representa una operación de eliminación en la colección restaurants. La operación busca y elimina todos los documentos cuyo valor del campo name sea "Mongo's Deli".
var deleteManyModel = new DeleteManyModel<BsonDocument>( Builders<BsonDocument>.Filter.Eq("name", "Mongo's Deli") );
Realizar la operación masiva
Después de definir una instancia WriteModel para cada operación que desee realizar, cree una instancia de una clase que implemente la interfaz IEnumerable. Añada sus objetos WriteModel a esta IEnumerable y, a continuación, pase el IEnumerable al método BulkWrite() o BulkWriteAsync(). De forma predeterminada, estos métodos ejecutan las operaciones en el orden en que se definen en la lista.
Tip
IEnumerable
Array y List son dos clases comunes que implementan la interfaz IEnumerable.
Selecciona de las siguientes pestañas para ver cómo usar el método sincrónico BulkWrite() y el método asincrónico BulkWriteAsync() para realizar una operación de escritura masiva en la colección restaurants:
var models = new List<WriteModel<BsonDocument>> { new InsertOneModel<BsonDocument>( new BsonDocument{ { "name", "Mongo's Deli" }, { "cuisine", "Sandwiches" }, { "borough", "Manhattan" }, { "restaurant_id", "1234" } } ), new InsertOneModel<BsonDocument>( new BsonDocument{ { "name", "Mongo's Deli" }, { "cuisine", "Sandwiches" }, { "borough", "Brooklyn" }, { "restaurant_id", "5678" } } ), new UpdateManyModel<BsonDocument>( Builders<BsonDocument>.Filter.Eq("name", "Mongo's Deli"), Builders<BsonDocument>.Update.Set("cuisine", "Sandwiches and Salads") ), new DeleteOneModel<BsonDocument>( Builders<BsonDocument>.Filter.Eq("restaurant_id", "1234") ) }; var results = collection.BulkWrite(models); Console.WriteLine(results);
var models = new List<WriteModel<BsonDocument>> { new InsertOneModel<BsonDocument>( new BsonDocument{ { "name", "Mongo's Deli" }, { "cuisine", "Sandwiches" }, { "borough", "Manhattan" }, { "restaurant_id", "1234" } } ), new InsertOneModel<BsonDocument>( new BsonDocument{ { "name", "Mongo's Deli" }, { "cuisine", "Sandwiches" }, { "borough", "Brooklyn" }, { "restaurant_id", "5678" } } ), new UpdateManyModel<BsonDocument>( Builders<BsonDocument>.Filter.Eq("name", "Mongo's Deli"), Builders<BsonDocument>.Update.Set("cuisine", "Sandwiches and Salads") ), new DeleteOneModel<BsonDocument>( Builders<BsonDocument>.Filter.Eq("restaurant_id", "1234") ) }; var results = await collection.BulkWriteAsync(models); Console.WriteLine(results);
Los ejemplos de código anteriores producen el siguiente resultado:
MongoDB.Driver.BulkWriteResult1+Acknowledged[MongoDB.Bson.BsonDocument]
Nota
Cuando el controlador ejecuta una operación masiva, utiliza la preocupación de escritura de la colección de destino. El controlador informa todos los errores de preocupación de escritura después de intentar todas las operaciones, independientemente del orden de ejecución.
Personalizar la operación de escritura masiva
Al llamar al método BulkWrite() o BulkWriteAsync(), se puede pasar una instancia de la clase BulkWriteOptions. La clase BulkWriteOptions contiene las siguientes propiedades, que representan opciones que se pueden usar para configurar la operación de escritura masiva:
Propiedad | Descripción |
|---|---|
| Specifies whether the operation bypasses document-level validation. For more
information, see Schema
Validation in the MongoDB Server
manual. Defaults to False. |
| A comment to attach to the operation, in the form of a BsonValue. For
more information, see the delete command
fields guide in the
MongoDB Server manual. |
| If True, the driver performs the write operations in the order
provided. If an error occurs, the remaining operations are not
attempted.If False, the driver performs the operations in an
arbitrary order and attempts to perform all operations. If any of the write
operations in an unordered bulk write fail, the driver
reports the errors only after attempting all operations.Defaults to True. |
| A map of parameter names and values, in the form of a BsonDocument. Values
must be constant or closed
expressions that don't reference document fields. For more information,
see the let statement in the
MongoDB Server manual. |
Los siguientes ejemplos de código utilizan un objeto BulkWriteOptions para realizar una operación de escritura masiva desordenada:
Valor de retorno
Los métodos BulkWrite() y BulkWriteAsync() devuelven un objeto BulkWriteResult que contiene las siguientes propiedades:
Propiedad | Descripción |
|---|---|
| Indicates whether the server acknowledged the bulk write operation. If the
value of this property is False and you try to access any other property
of the BulkWriteResult object, the driver throws an exception. |
| The number of documents deleted, if any. |
| The number of documents inserted, if any. |
| The number of documents matched for an update, if applicable. |
| The number of documents modified, if any. |
| Indicates whether the modified count is available. |
| A list that contains information about each request that
resulted in an upsert operation. |
| The number of requests in the bulk operation. |
Manejo de excepciones
Si alguna de las operaciones en una operación de escritura masiva falla, el controlador .NET/C# lanza un BulkWriteError y no realiza ninguna operación adicional.
Un objeto BulkWriteError contiene la propiedad Index que describe el índice de la solicitud que resultó en un error.
Escritura masiva del cliente
Al conectarse a una implementación con MongoDB Server 8.0 o posterior, puede usar el método IMongoClient.BulkWrite() o IMongoClient.BulkWriteAsync() para escribir en varias bases de datos y colecciones del mismo clúster. Estos métodos realizan todas las operaciones de escritura en una sola llamada.
Para cada operación de escritura que desee realizar, cree una instancia de una de las siguientes clases BulkWriteModel:
BulkWriteInsertOneModel<TDocument>BulkWriteUpdateOneModel<TDocument>BulkWriteUpdateManyModel<TDocument>BulkWriteReplaceOneModel<TDocument>BulkWriteDeleteOneModel<TDocument>BulkWriteDeleteManyModel<TDocument>
Las siguientes secciones muestran cómo crear y usar instancias de las clases anteriores para realizar la operación de escritura correspondiente en una escritura masiva. La sección "Realizar la operación masiva" muestra cómo pasar una lista de modelos al BulkWrite() BulkWriteAsync() método o para realizar la operación masiva.
Operaciones de inserción
Para realizar una operación de inserción, cree una instancia de la clase BulkWriteInsertOneModel<TDocument>. El constructor BulkWriteInsertOneModel<TDocument> acepta los siguientes parámetros:
Parameter | Descripción |
|---|---|
| The database and collection to insert the BSON document into. Data Type: string or CollectionNamespace |
| The document to insert into the collection. Data Type: TDocument |
El siguiente ejemplo crea instancias de la clase BulkWriteInsertOneModel<TDocument>. Estas instancias indican al controlador que inserte documentos en las colecciones sample_restaurants.restaurants y sample_mflix.movies.
var restaurantToInsert = new BulkWriteInsertOneModel<BsonDocument>( "sample_restaurants.restaurants", new BsonDocument{ { "name", "Mongo's Deli" }, { "cuisine", "Sandwiches" }, { "borough", "Manhattan" }, { "restaurant_id", "1234" } } ); var movieToInsert = new BulkWriteInsertOneModel<BsonDocument>( "sample_mflix.movies", new BsonDocument{ { "title", "Silly Days" }, { "year", 2022 } } );
Operaciones de actualizar
Para actualizar un solo documento, cree una instancia de la clase BulkWriteUpdateOneModel<TDocument>. El constructor BulkWriteUpdateOneModel<TDocument> acepta los siguientes parámetros:
Parameter | Descripción |
|---|---|
| The database and collection to insert the BSON document into. Data Type: string or CollectionNamespace |
| The query filter that specifies the criteria used to match documents in your collection.
The UpdateOne operation updates only the first document that matches the
query filter.Data Type: FilterDefinition<TDocument> |
| The update operation you want to perform. For more information about update
operations, see Field Update Operators
in the MongoDB Server manual. Data Type: UpdateDefinition<TDocument> |
| |
| Optional. The index to use to scan for documents.
See the MongoDB Server manual
for more information. Data Type: BsonValue Default: null |
| Optional. Specifies whether the update operation performs an upsert operation if no
documents match the query filter. See the MongoDB Server manual
for more information. Data Type: booleanDefault: false |
| Specifies which array elements to modify for an update operation on an array field.
See the MongoDB Server manual
for more information. Data Type: IEnumerable<ArrayFilterDefinition> Default: null |
En el siguiente ejemplo de código, los objetos BulkWriteUpdateOneModel<BsonDocument> representan operaciones de actualización en las colecciones sample_restaurants.restaurants y sample_mflix.movies.
var restaurantUpdate = new BulkWriteUpdateOneModel<BsonDocument>( "sample_restaurants.restaurants", Builders<BsonDocument>.Filter.Eq("name", "Mongo's Deli"), Builders<BsonDocument>.Update.Set("cuisine", "Sandwiches and Salads") ); var movieUpdate = new BulkWriteUpdateOneModel<BsonDocument>( "sample_mflix.movies", Builders<BsonDocument>.Filter.Eq("title", "Carrie"), Builders<BsonDocument>.Update.Set("seen", True) );
Para actualizar varios documentos, cree una instancia de la BulkWriteUpdateManyModel<TDocument> clase. El constructor de esta clase acepta los mismos parámetros que el BulkWriteUpdateOneModel<TDocument> constructor. La BulkWriteUpdateManyModel<TDocument> operación actualiza todos los documentos que coinciden con el filtro de consulta.
En el siguiente ejemplo de código, el objeto BulkWriteUpdateManyModel<BsonDocument> representa una operación de actualización en la colección sample_restaurants.restaurants. La operación busca todos los documentos de la colección cuyo valor del campo name sea "Starbucks". A continuación, actualiza el valor del campo cuisine a "Coffee (Chain)".
var updateManyModel = new BulkWriteUpdateManyModel<BsonDocument>( "sample_restaurants.restaurants", Builders<BsonDocument>.Filter.Eq("name", "Starbucks"), Builders<BsonDocument>.Update.Set("cuisine", "Coffee (Chain)") );
Reemplazar operaciones
Para reemplazar los campos de un documento, cree una instancia de la clase BulkWriteReplaceOneModel<TDocument>. El constructor BulkWriteReplaceOneModel<TDocument> acepta los siguientes parámetros:
Parameter | Descripción |
|---|---|
| The database and collection to insert the BSON document into. Data Type: string or CollectionNamespace |
| The query filter that specifies the criteria used to match documents in your collection.
The UpdateOne operation updates only the first document that matches the
query filter.Data Type: FilterDefinition<TDocument> |
| The replacement document, which specifies the fields and values to insert in the
target document. Data Type: TDocument |
| |
| Optional. The index to use to scan for documents.
See the MongoDB Server manual
for more information. Data Type: BsonValue Default: null |
| Optional. Specifies whether the update operation performs an upsert operation if no
documents match the query filter.
See the MongoDB Server manual
for more information. Data Type: booleanDefault: false |
En el siguiente ejemplo, los objetos BulkWriteReplaceOneModel<BsonDocument> representan operaciones de reemplazo en las colecciones sample_restaurants.restaurants y sample_mflix.movies.
var restaurantReplacement = new BulkWriteReplaceOneModel<BsonDocument>( "sample_restaurants.restaurants", Builders<BsonDocument>.Filter.Eq("restaurant_id", "1234"), new BsonDocument{ { "name", "Mongo's Pizza" }, { "cuisine", "Pizza" }, { "borough", "Brooklyn" }, { "restaurant_id", "5678" } } ); var movieReplacement = new BulkWriteReplaceOneModel<BsonDocument>( "sample_mflix.movies", Builders<BsonDocument>.Filter.Eq("title", "Insomnia"), new BsonDocument{ { "name", "Loving Sylvie" }, { "year", 1999 } } );
Operaciones de borrar
Para eliminar un documento, cree una instancia de la clase BulkWriteDeleteOneModel<TDocument>. El constructor BulkWriteDeleteOneModel<TDocument> acepta los siguientes parámetros:
Parameter | Descripción |
|---|---|
| The database and collection to insert the BSON document into. Data Type: string or CollectionNamespace |
| The query filter that specifies the criteria used to match documents in your collection.
The DeleteOne operation deletes only the first document that matches the
query filter.Data Type: FilterDefinition<TDocument> |
| |
| Optional. The index to use to scan for documents.
See the MongoDB Server manual
for more information. Data Type: BsonValue Default: null |
En el siguiente ejemplo de código, los objetos BulkWriteDeleteOneModel<BsonDocument> representan operaciones de eliminación en las colecciones sample_restaurants.restaurants y sample_mflix.movies.
var restaurantToDelete = new BulkWriteDeleteOneModel<BsonDocument>( "sample_restaurants.restaurants", Builders<BsonDocument>.Filter.Eq("restaurant_id", "5678") ); var movieToDelete = new BulkWriteDeleteOneModel<BsonDocument>( "sample_mflix.movies", Builders<BsonDocument>.Filter.Eq("title", "Mr. Nobody") );
Para eliminar múltiples documentos, crea una instancia de la clase BulkWriteDeleteManyModel<TDocument> y pasa un filtro de query que especifique el documento que deseas eliminar. La DeleteMany remueve todos los documentos que coinciden con el filtro de query.
En el siguiente ejemplo de código, el objeto BulkWriteDeleteManyModel<BsonDocument> representa una operación de eliminación en la colección sample_restaurants.restaurants. La operación busca y elimina todos los documentos cuyo valor del campo name sea "Mongo's Deli".
var deleteManyModel = new BulkWriteDeleteManyModel<BsonDocument>( "sample_restaurants.restaurants", Builders<BsonDocument>.Filter.Eq("name", "Mongo's Deli") );
Realizar la operación masiva
Después de definir una instancia BulkWriteModel para cada operación que desee realizar, cree una instancia de una clase que implemente la interfaz IReadOnlyList. Añada sus objetos BulkWriteModel a esta IReadOnlyList y, a continuación, pase el IReadOnlyList al método BulkWrite() o BulkWriteAsync(). De forma predeterminada, estos métodos ejecutan las operaciones en el orden en que se definen en la colección.
Tip
ListaDeSoloLectura
Array y List son dos clases comunes que implementan la interfaz IReadOnlyList.
Seleccione una de las siguientes pestañas para ver cómo utilizar el método sincrónico BulkWrite() y el método asincrónico BulkWriteAsync() para realizar una operación de escritura masiva en múltiples espacios de nombres.
var client = new MongoClient("mongodb://localhost:27017"); var restaurantNamespace = "sample_restaurants.restaurants"; var movieNamespace = "sample_mflix.movies"; var bulkWriteModels = new[] { new BulkWriteInsertOneModel<BsonDocument>( restaurantNamespace, new BsonDocument{ { "name", "Mongo's Deli" }, { "cuisine", "Sandwiches" }, { "borough", "Manhattan" }, { "restaurant_id", "1234" } } ), new BulkWriteInsertOneModel<BsonDocument>( movieNamespace, new BsonDocument{ { "name", "Sarah's Secret" }, { "year", 1988 } } ), new BulkWriteUpdateManyModel<BsonDocument>( restaurantNamespace, Builders<BsonDocument>.Filter.Eq("name", "Mongo's Deli"), Builders<BsonDocument>.Update.Set("cuisine", "Sandwiches and Salads") ), new BulkWriteDeleteOneModel<BsonDocument>( movieNamespace, Builders<BsonDocument>.Filter.Eq("title", "House") ) }; var result = client.BulkWrite(bulkWriteModels); Console.WriteLine(result);
var client = new MongoClient("mongodb://localhost:27017"); var restaurantNamespace = "sample_restaurants.restaurants"; var movieNamespace = "sample_mflix.movies"; var bulkWriteModels = new[] { new BulkWriteInsertOneModel<BsonDocument>( restaurantNamespace, new BsonDocument{ { "name", "Mongo's Deli" }, { "cuisine", "Sandwiches" }, { "borough", "Manhattan" }, { "restaurant_id", "1234" } } ), new BulkWriteInsertOneModel<BsonDocument>( movieNamespace, new BsonDocument{ { "name", "Sarah's Secret" }, { "year", 1988 } } ), new BulkWriteUpdateManyModel<BsonDocument>( restaurantNamespace, Builders<BsonDocument>.Filter.Eq("name", "Mongo's Deli"), Builders<BsonDocument>.Update.Set("cuisine", "Sandwiches and Salads") ), new BulkWriteDeleteOneModel<BsonDocument>( movieNamespace, Builders<BsonDocument>.Filter.Eq("title", "House") ) }; var result = await client.BulkWriteAsync(bulkWriteModels); Console.WriteLine(result);
Los ejemplos de código anteriores producen el siguiente resultado:
BulkWriteResult({'writeErrors': [], 'writeConcernErrors': [], 'nInserted': 2, 'nUpserted': 0, 'nMatched': 2, 'nModified': 2, 'nRemoved': 1, 'upserted': []}, acknowledged=True)
Personalizar escritura masiva
Al llamar al método BulkWrite() o BulkWriteAsync(), se puede pasar una instancia de la clase ClientBulkWriteOptions. La clase ClientBulkWriteOptions contiene las siguientes propiedades, que representan opciones que se pueden usar para configurar la operación de escritura masiva:
Propiedad | Descripción |
|---|---|
| Specifies whether the operation bypasses document-level validation. For more
information, see Schema
Validation in the MongoDB Server
manual. Defaults to false. |
| A comment to attach to the operation, in the form of a BsonValue. For
more information, see the delete command
fields guide in the
MongoDB Server manual. |
| If true, the driver performs the write operations in the order
provided. If an error occurs, the remaining operations are not
attempted.If false, the driver performs the operations in an
arbitrary order and attempts to perform all operations. If any of the write
operations in an unordered bulk write fail, the driver
reports the errors only after attempting all operations.Defaults to True. |
| A map of parameter names and values, in the form of a BsonDocument. Values
must be constant or closed
expressions that don't reference document fields. For more information,
see the let statement in the
MongoDB Server manual. |
| Specifies whether the ClientBulkWriteResult object returned by the operation
includes detailed results for each successful write operation.Defaults to false. |
| The write concern to use for the write operation, as a value from the WriteConcern
enum.Defaults to the write concern of the collection on which the operation is running. |
Los siguientes ejemplos de código utilizan un objeto ClientBulkWriteOptions para personalizar la operación de escritura masiva:
Valor de retorno
Los métodos BulkWrite() y BulkWriteAsync() devuelven un objeto ClientBulkWriteResult que contiene las siguientes propiedades:
Propiedad | Descripción |
|---|---|
| Indicates whether the server acknowledged the bulk write operation. If the
value of this property is false and you try to access any other property
of the ClientBulkWriteResult object, the driver throws an exception. |
| An IReadOnlyDictionary<int, BulkWriteDeleteResult> object containing the
results of each successful delete operation, if any. |
| The number of documents deleted, if any. |
| An IReadOnlyDictionary<int, BulkWriteInsertOneResult> object containing the
results of each successful insert operation, if any. |
| The number of documents inserted, if any. |
| The number of documents matched for an update, if applicable. |
| The number of documents modified, if any. |
| An IReadOnlyDictionary<int, BulkWriteUpdateResult> object containing the
results of each successful update operation, if any. |
| The number of documents upserted, if any. |
Manejo de excepciones
Si alguna de las operaciones en una operación de escritura masiva falla, el controlador .NET/C# lanza un ClientBulkWriteException y no realiza ninguna operación adicional.
Un objeto ClientBulkWriteException contiene las siguientes propiedades:
Propiedad | Descripción |
|---|---|
| |
| The error message. Data Type: string |
| A dictionary of errors that occurred during the bulk write operation. Data Type: IReadOnlyDictionary<int, WriteError> |
| The results of any successful operations performed before the exception was thrown. Data Type: ClientBulkWriteResult |
| Write concern errors that occurred during execution of the bulk write operation. Data Type: IReadOnlyList<MongoWriteConcernException> |
|
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 |
|---|---|---|
| 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 |
|
| (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: booleanDefault: false |
|
| (Optional) Specifies the sort order of case differences during tertiary level comparisons. Data Type: CollationCaseFirst Default: CollationCaseFirst.Off |
|
| (Optional) Specifies the level of comparison to perform, as defined in the
ICU documentation. Data Type: CollationStrength Default: CollationStrength.Tertiary |
|
| (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: booleanDefault: false |
|
| (Optional) Specifies whether the driver considers whitespace and punctuation as base
characters for purposes of comparison. Data Type: CollationAlternate Default: CollationAlternate.NonIgnorable (spaces and punctuation are
considered base characters) |
|
| (Optional) Specifies which characters the driver considers ignorable when
the alternate argument is CollationAlternate.Shifted.Data Type: CollationMaxVariable Default: CollationMaxVariable.Punctuation (the driver ignores punctuation
and spaces) |
|
| (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: booleanDefault: false |
|
| (Optional) Specifies whether strings containing diacritics sort from the back of the string
to the front. Data Type: booleanDefault: false |
|
Más información sobre la intercalación en la página Intercalación en el manual de MongoDB Server.
Información Adicional
Para aprender a realizar operaciones de escritura individuales, consulte las siguientes guías:
Documentación de la API
Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API:
Colección Escritura masiva
Escritura masiva del cliente