Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Operaciones de escritura masiva

En esta guía, puedes aprender a realizar múltiples operaciones de escritura en una sola llamada a la base de datos utilizando operaciones de escritura en bloque.

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 utilizar una operación de guardar masiva, puedes realizar múltiples operaciones de guardar en menos llamadas a la base de datos. Puedes realizar operaciones de guardar en bloque en los siguientes niveles:

  • Colección: Se puede usar el método IMongoCollection.BulkWrite() o IMongoCollection.BulkWriteAsync() para realizar operaciones de escritura masiva en una única colección. Estos métodos realizan una llamada a la base de datos para cada tipo de operación de guardar. Por ejemplo, los métodos realizan múltiples 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 operación de reemplazo.

  • Cliente: Si tu aplicación se conecta a la versión 8.0 o posterior del MongoDB Server, puedes usar el método IMongoClient.BulkWrite() o IMongoClient.BulkWriteAsync() para realizar operaciones de escritura masiva en múltiples colecciones y bases de datos dentro del mismo clúster. Este método realiza todas las operaciones de guardar en una sola llamada a la base de datos.

Los ejemplos de esta guía utilizan las colecciones sample_restaurants.restaurants y sample_mflix.movies del Atlas datasets de muestra. Para aprender a crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de muestra, consulta la Guía de inicio rápido de MongoDB.

Tip

Operaciones de guardado en bloque con POCOs

Los ejemplos en esta guía utilizan el tipo BsonDocument para el tipo TDocument en todas las clases genéricas. También puedes utilizar un Objeto CLR Antiguo Simple (POCO) para estas clases. Para ello, debes definir una clase que represente los documentos en tu colección. La clase debe tener propiedades que coincidan con los campos de tus documentos. Para más información, consulta POCOs.

Las operaciones de guardar en bloque contienen una o más operaciones de guardar. Para cada operación de guardado que desee realizar, cree una instancia de una de las siguientes clases de WriteModel<TDocument>:

  • DeleteManyModel<TDocument>

  • DeleteOneModel<TDocument>

  • InsertOneModel<TDocument>

  • ReplaceOneModel<TDocument>

  • UpdateManyModel<TDocument>

  • UpdateOneModel<TDocument>

Las siguientes secciones muestran cómo crear y utilizar instancias de las clases anteriores para realizar la correspondiente operación de escritura en una operación de escritura masiva. La sección Realizar la Operación Masiva muestra cómo pasar una lista de modelos al método BulkWrite() o BulkWriteAsync() para ejecutar la operación masiva.

Para realizar una operación de inserción, cree una instancia de InsertOneModel<TDocument> y especifique el documento que desea insertar.

El siguiente ejemplo crea una instancia de la clase InsertOneModel<BsonDocument>. Esta instancia orienta al driver a insertar un documento en el que el 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 que ya exista en la colección. En esta situación, el driver lanza un MongoBulkWriteException.

Para actualizar un solo documento, cree un instancia de UpdateOneModel<TDocument> y pase los siguientes argumentos:

  • Filtro de query que especifica los criterios utilizados para seleccionar documentos en tu colección. Para obtener más información sobre cómo especificar una query, consulta Operadores de query y proyección en el manual del MongoDB Server.

  • Actualizar el documento que describe la actualización que se debe realizar. Para obtener más información sobre cómo especificar una actualización, consulta Operadores de actualización en el manual del MongoDB Server.

Una instancia de UpdateOneModel<TDocument> especifica una actualización para el primer documento que coincida con el filtro de query.

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 coincide con el primer documento en la colección donde el valor del campo name es "Mongo's Deli". Luego actualiza el valor del campo cuisine en el 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 para UpdateOneModel<TDocument>. La clase UpdateManyModel<TDocument> especifica actualizaciones para todos los documentos que coincidan con su filtro de query.

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 coincide con todos los documentos de la colección donde el valor del campo name es "Mongo's Deli". Luego 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")
);

Una operación de reemplazo remueve todos los campos y valores de un documento especificado y los reemplaza por nuevos campos y valores que usted especifica. Para realizar una operación de reemplazo, crea una instancia de ReplaceOneModel<TDocument> y pasa un filtro de query junto con los campos y valores con los que deseas 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 coincide con el documento en la colección donde el valor del campo restaurant_id es "1234". Luego remueve 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.

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 donde el valor del campo restaurant_id es "5678".

var deleteOneModel = new DeleteOneModel<BsonDocument>(
Builders<BsonDocument>.Filter.Eq("restaurant_id", "5678")
);

Para borrar varios documentos, crea una instancia de DeleteManyModel<TDocument> y pasa un filtro de query que especifique los documentos que deseas borrar. Una instancia de DeleteManyModel<TDocument> proporciona instrucciones para remover todos los documentos que coincidan con el filtro de query.

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 coincide y elimina todos los documentos donde el valor del campo name es "Mongo's Deli".

var deleteManyModel = new DeleteManyModel<BsonDocument>(
Builders<BsonDocument>.Filter.Eq("name", "Mongo's Deli")
);

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. Agrega tus objetos de WriteModel a este IEnumerable, luego pasa el IEnumerable al método BulkWrite() o BulkWriteAsync(). Por defecto, estos métodos ejecutan las operaciones en el orden en que están definidos 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 siguientes ejemplos de código producen la siguiente salida:

MongoDB.Driver.BulkWriteResult1+Acknowledged[MongoDB.Bson.BsonDocument]

Nota

Cuando el driver ejecuta una operación masiva, utiliza el nivel de confirmación de escritura (write concern) de la colección de destino. El driver reporta todos los errores de nivel de confirmación de escritura (write concern) después de intentar todas las operaciones, independientemente del orden de ejecución.

Cuando llamas al método BulkWrite() o BulkWriteAsync(), puedes pasar una instancia de la clase BulkWriteOptions. La clase BulkWriteOptions contiene las siguientes propiedades, que representan opciones que puedes usar para configurar la operación de escritura masiva:

Propiedad
Descripción

BypassDocumentValidation

Especifica si la operación omite la validación a nivel de documento. Para obtener más información, consulte Validación de esquema en el manual del servidor MongoDB.
El valor predeterminado False es.

Comment

Un comentario para adjuntar a la operación, en BsonValue formato. Para obtener más información, consulte la guía de campos del comando delete en el manual del servidor MongoDB.

IsOrdered

TrueSi, el controlador realiza las operaciones de escritura en el orden especificado. Si se produce un error, no se intentan las operaciones restantes.

FalseSi, el controlador realiza las operaciones en un orden arbitrario e intenta realizarlas todas. Si alguna de las operaciones de escritura en una escritura masiva no ordenada falla, el controlador informa de los errores solo después de haber intentado todas las operaciones.
El valor predeterminado True es.

Let

Un mapa de nombres y valores de parámetros, en forma de BsonDocument. Los valores deben ser constantes o expresiones cerradas que no hagan referencia a campos de documentos. Para obtener más información, consulta la instrucción let en el manual del MongoDB Server.

Los siguientes ejemplos de código usan un objeto BulkWriteOptions para realizar una operación de guardado masivo no ordenada:

var models = new List<WriteModel<BsonDocument>>
{
new DeleteOneModel<BsonDocument>(
Builders<BsonDocument>.Filter.Eq("restaurant_id", "5678")
)
};
var options = new BulkWriteOptions
{
IsOrdered = false,
};
collection.BulkWrite(models, options);
var models = new List<WriteModel<BsonDocument>>
{
new DeleteOneModel<BsonDocument>(
Builders<BsonDocument>.Filter.Eq("restaurant_id", "5678")
)
};
var options = new BulkWriteOptions
{
IsOrdered = false,
};
await collection.BulkWriteAsync(models, options);

Los métodos BulkWrite() y BulkWriteAsync() devuelven un objeto BulkWriteResult que contiene las siguientes propiedades:

Propiedad
Descripción

IsAcknowledged

Indica si el servidor reconoció la operación de escritura masiva. Si el valor de esta propiedad es False e intenta acceder a cualquier otra propiedad del objeto BulkWriteResult, el controlador generará una excepción.

DeletedCount

El número de documentos eliminados, si los hubiera.

InsertedCount

El número de documentos insertados, si los hay.

MatchedCount

El número de documentos coincidentes para una actualización, si procede.

ModifiedCount

El número de documentos modificados, si corresponde.

IsModifiedCountAvailable

Indica si el recuento modificado está disponible.

Upserts

Una lista que contiene información sobre cada solicitud que resultó en una operación de inserción o actualización.

RequestCount

El número de solicitudes en la operación masiva.

Si alguna de las operaciones en una operación de escritura masiva falla, el driver .NET/C# lanza un BulkWriteError y no realiza ninguna otra operación.

Un objeto BulkWriteError contiene la propiedad Index que describe el índice de la solicitud que resultó en un error.

Al conectarse a una implementación que ejecuta MongoDB Server 8.0 o posterior, se puede utilizar el método IMongoClient.BulkWrite() o IMongoClient.BulkWriteAsync() para guardar en varias bases de datos y colecciones dentro del mismo clúster. Estos métodos realizan todas las operaciones de guardar en una sola llamada.

Para cada operación de guardar que desees realizar, crea 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 utilizar instancias de las clases anteriores para realizar la operación de guardado correspondiente en un guardado masivo. La sección Realizar la Operación Masiva muestra cómo pasar una lista de modelos al método BulkWrite() o BulkWriteAsync() para ejecutar la operación masiva.

Para realizar una operación de inserción, crea una instancia de la clase BulkWriteInsertOneModel<TDocument>. El constructor BulkWriteInsertOneModel<TDocument> acepta los siguientes parámetros:

Parameter
Descripción

collectionNamespace

La base de datos y la colección en la que se insertará el documento BSON.

Tipo de datos: string o CollectionNamespace

document

El documento que se insertará en la colección.

Tipo de datos: 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 }
}
);

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

collectionNamespace

La base de datos y la colección en la que se insertará el documento BSON.

Tipo de datos: string o CollectionNamespace

filter

El filtro de consulta que especifica los criterios utilizados para hacer coincidir los documentos de su colección. La UpdateOne operación actualiza solo el primer documento que coincide con el filtro de consulta.

Tipo de datos: FilterDefinition<TDocument>

update

La operación de actualización que desea realizar. Para obtener más información sobre las operaciones de actualización, consulte Operadores de actualización de campos en el manual del servidor MongoDB.

Tipo de datos: UpdateDefinition<TDocument>

collation

opcional. La intercalación de lenguaje que se usará al clasificar los resultados. Consulte la sección Intercalación de esta página para obtener más información.

Tipo de dato: Intercalación
Por defecto: null

hint

Opcional. Índice a utilizar para buscar documentos.Consulte el manual del servidor MongoDB para obtener más información.

Tipo de datos: BsonValue.
Valor predeterminado:. null

isUpsert

Opcional. Especifica si la operación de actualización realiza una operación de inserción/actualización si ningún documento coincide con el filtro de consulta. Consulte el manual del servidor MongoDB para obtener más información.

Tipo de datos: boolean
Predeterminado: false

arrayFilters

Especifica qué elementos de la matriz se modificarán para una operación de actualización en un campo de matriz. Consulte el manual del servidor MongoDB para obtener más información.

Tipo de datos: IEnumerable Valor<ArrayFilterDefinition>
predeterminado: 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 clase BulkWriteUpdateManyModel<TDocument>. El constructor de esta clase acepta los mismos parámetros que el constructor BulkWriteUpdateOneModel<TDocument>. La operación BulkWriteUpdateManyModel<TDocument> actualiza todos los documentos que coinciden con tu filtro de query.

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 coincide con todos los documentos de la colección donde el valor del campo name es "Starbucks". Luego 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)")
);

Para reemplazar los campos en un documento, cree una instancia de la clase BulkWriteReplaceOneModel<TDocument>. El constructor BulkWriteReplaceOneModel<TDocument> acepta los siguientes parámetros:

Parameter
Descripción

collectionNamespace

La base de datos y la colección en la que se insertará el documento BSON.

Tipo de datos: string o CollectionNamespace

filter

El filtro de consulta que especifica los criterios utilizados para hacer coincidir los documentos de su colección. La UpdateOne operación actualiza solo el primer documento que coincide con el filtro de consulta.

Tipo de datos: FilterDefinition<TDocument>

replacement

El documento de reemplazo, que especifica los campos y valores que se insertarán en el documento de destino.

Tipo de datos: TDocument

collation

opcional. La intercalación de lenguaje que se usará al clasificar los resultados. Consulte la sección Intercalación de esta página para obtener más información.

Tipo de dato: Intercalación
Por defecto: null

hint

Opcional. Índice a utilizar para buscar documentos.Consulte el manual del servidor MongoDB para obtener más información.

Tipo de datos: BsonValue.
Valor predeterminado:. null

isUpsert

Opcional. Especifica si la operación de actualización realiza una operación de inserción/actualización si ningún documento coincide con el filtro de consulta. Consulte el manual del servidor MongoDB para obtener más información.

Tipo de datos: boolean
Predeterminado: 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 }
}
);

Para borrar un documento, cree una instancia de la clase BulkWriteDeleteOneModel<TDocument>. El constructor BulkWriteDeleteOneModel<TDocument> acepta los siguientes parámetros:

Parameter
Descripción

collectionNamespace

La base de datos y la colección en la que se insertará el documento BSON.

Tipo de datos: string o CollectionNamespace

filter

El filtro de consulta que especifica los criterios utilizados para hacer coincidir los documentos de su colección. La DeleteOne operación elimina solo el primer documento que coincide con el filtro de consulta.

Tipo de datos: FilterDefinition<TDocument>

collation

opcional. La intercalación de lenguaje que se usará al clasificar los resultados. Consulte la sección Intercalación de esta página para obtener más información.

Tipo de dato: Intercalación
Por defecto: null

hint

Opcional. Índice a utilizar para buscar documentos.Consulte el manual del servidor MongoDB para obtener más información.

Tipo de datos: BsonValue.
Valor predeterminado:. 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 coincide y elimina todos los documentos donde el valor del campo name es "Mongo's Deli".

var deleteManyModel = new BulkWriteDeleteManyModel<BsonDocument>(
"sample_restaurants.restaurants",
Builders<BsonDocument>.Filter.Eq("name", "Mongo's Deli")
);

Después de definir una instancia de BulkWriteModel para cada operación que desee realizar, cree una instancia de una clase que implemente la interfaz IReadOnlyList. Agrega tus BulkWriteModel objetos a este IReadOnlyList, luego pasa el IReadOnlyList al método BulkWrite() o BulkWriteAsync(). Por defecto, estos métodos ejecutan las operaciones en el orden en que están definidas en la colección.

Tip

IReadOnlyList

Array y List son dos clases comunes que implementan la interfaz IReadOnlyList.

Selecciona 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 guardar masivo 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 siguientes ejemplos de código producen la siguiente salida:

BulkWriteResult({'writeErrors': [], 'writeConcernErrors': [], 'nInserted': 2, 'nUpserted': 0, 'nMatched': 2, 'nModified': 2, 'nRemoved': 1, 'upserted': []}, acknowledged=True)

Cuando llamas al método BulkWrite() o BulkWriteAsync(), puedes pasar una instancia de la clase ClientBulkWriteOptions. La clase ClientBulkWriteOptions contiene las siguientes propiedades, que representan opciones que puedes usar para configurar la operación de escritura masiva:

Propiedad
Descripción

BypassDocumentValidation

Especifica si la operación omite la validación a nivel de documento. Para obtener más información, consulte Validación de esquema en el manual del servidor MongoDB.
El valor predeterminado false es.

Comment

Un comentario para adjuntar a la operación, en BsonValue formato. Para obtener más información, consulte la guía de campos del comando delete en el manual del servidor MongoDB.

IsOrdered

trueSi, el controlador realiza las operaciones de escritura en el orden especificado. Si se produce un error, no se intentan las operaciones restantes.

falseSi, el controlador realiza las operaciones en un orden arbitrario e intenta realizarlas todas. Si alguna de las operaciones de escritura en una escritura masiva no ordenada falla, el controlador informa de los errores solo después de haber intentado todas las operaciones.
El valor predeterminado True es.

Let

Un mapa de nombres y valores de parámetros, en forma de BsonDocument. Los valores deben ser constantes o expresiones cerradas que no hagan referencia a campos de documentos. Para obtener más información, consulta la instrucción let en el manual del MongoDB Server.

VerboseResult

Especifica si el ClientBulkWriteResult objeto devuelto por la operación incluye resultados detallados para cada operación de escritura exitosa. El valor
predeterminado false es.

WriteConcern

El objeto de escritura que se utilizará para la operación de escritura, como un valor de la WriteConcern enumeración. Por defecto, se
utiliza el objeto de escritura de la colección en la que se ejecuta la operación.

Los siguientes ejemplos de código usan un objeto ClientBulkWriteOptions para personalizar la operación masiva de escritura:

var client = new MongoClient("mongodb://localhost:27017");
var deleteOneModel = new BulkWriteDeleteOneModel<BsonDocument>(
"sample_restaurants.restaurants",
Builders<BsonDocument>.Filter.Eq("restaurant_id", "5678")
);
var clientBulkWriteOptions = new ClientBulkWriteOptions
{
IsOrdered = false,
WriteConcern = WriteConcern.Unacknowledged,
VerboseResult = true
};
var result = client.BulkWrite(deleteOneModel, clientBulkWriteOptions);
var client = new MongoClient("mongodb://localhost:27017");
var deleteOneModel = new BulkWriteDeleteOneModel<BsonDocument>(
"sample_restaurants.restaurants",
Builders<BsonDocument>.Filter.Eq("restaurant_id", "5678")
);
var clientBulkWriteOptions = new ClientBulkWriteOptions
{
IsOrdered = false,
WriteConcern = WriteConcern.Unacknowledged,
VerboseResult = true
};
var result = await client.BulkWriteAsync(deleteOneModel, clientBulkWriteOptions);

Los métodos BulkWrite() y BulkWriteAsync() devuelven un objeto ClientBulkWriteResult que contiene las siguientes propiedades:

Propiedad
Descripción

Acknowledged

Indica si el servidor reconoció la operación de escritura masiva. Si el valor de esta propiedad es false e intenta acceder a cualquier otra propiedad del objeto ClientBulkWriteResult, el controlador generará una excepción.

DeleteResults

Un objeto IReadOnlyDictionary<int, BulkWriteDeleteResult> que contiene los resultados de cada operación de eliminación exitosa, si los hay.

DeletedCount

El número de documentos eliminados, si los hubiera.

InsertResults

Un objeto IReadOnlyDictionary<int, BulkWriteInsertOneResult> que contiene los resultados de cada operación de inserción exitosa, si las hay.

InsertedCount

El número de documentos insertados, si los hay.

MatchedCount

El número de documentos coincidentes para una actualización, si procede.

ModifiedCount

El número de documentos modificados, si corresponde.

UpsertResults

Un objeto IReadOnlyDictionary<int, BulkWriteUpdateResult> que contiene los resultados de cada operación de actualización exitosa, si las hay.

UpsertedCount

El número de documentos insertados/actualizados, si los hay.

Si alguna de las operaciones en una operación de escritura masiva falla, el driver .NET/C# lanza un ClientBulkWriteException y no realiza ninguna otra operación.

Un objeto ClientBulkWriteException contiene las siguientes propiedades:

Propiedad
Descripción

connectionId

El identificador de conexión.

Tipo de datos: ConnectionId

message

El mensaje de error.

Tipo de datos: cadena

writeErrors

Un diccionario de errores ocurridos durante la operación de escritura masiva.

Tipo de datos: IReadOnlyDictionary<int, WriteError>

partialResult

Los resultados de cualquier operación exitosa realizada antes de que se produjera la excepción.

Tipo de datos: ClientBulkWriteResult

writeConcernErrors

Errores de escritura que ocurrieron durante la ejecución de la operación de escritura masiva.

Tipo de datos: IReadOnlyList

innerException

La excepción interna.

Tipo de datos: Excepció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

locale

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.

Si desea utilizar una comparación binaria simple, utilice la Collation.Simple propiedad estática para devolver un Collation objeto con establecido locale "simple"en.
Tipo de datos: string

Locale

caseLevel

(Opcional) Especifica si se debe incluir la comparación de mayúsculas y minúsculas.

Cuando este argumento true es, el comportamiento del controlador depende del valor del strength argumento:

- Si strength CollationStrength.Primaryes, el controlador compara caracteres base y mayúsculas y minúsculas.
- Si strength CollationStrength.Secondaryes, el controlador compara caracteres base, diacríticos, otras diferencias secundarias y mayúsculas y minúsculas.
- Si strength es cualquier otro valor, este argumento se ignora.

Cuando este argumento false es, el controlador no incluye la comparación de mayúsculas y minúsculas en el nivel Primary de fuerza Secondary o.

Tipo boolean
de datos: Predeterminado: false

CaseLevel

caseFirst

(Opcional) Especifica el orden de clasificación de las diferencias de mayúsculas y minúsculas durante las comparaciones de nivel terciario.

Tipo de datos: CollationCaseFirst
Valor predeterminado: CollationCaseFirst.Off

CaseFirst

strength

(Opcional) Especifica el nivel de comparación a realizar, tal como se define en la documentación de la UCI.

Tipo de datos: CollationStrength
Valor predeterminado: CollationStrength.Tertiary

Strength

numericOrdering

(Opcional) Especifica si el controlador compara las cadenas numéricas como números.

Si este argumento true es, el controlador compara las cadenas numéricas como números. Por ejemplo, al comparar las cadenas "10" y "2", el controlador trata los valores como 10 2y, y encuentra 10 que es mayor.

Si este argumento es false o se excluye, el controlador compara las cadenas numéricas como cadenas. Por ejemplo, al comparar las cadenas "10" y "2", el controlador compara un carácter a la vez. Como "1" es menor que "2", el controlador encuentra10que " " es menor que "2".

Para obtener más información, consulte Restricciones de intercalación en el manual del servidor MongoDB.

Tipo de datos: boolean
Predeterminado: false

NumericOrdering

alternate

(Opcional) Especifica si el controlador considera los espacios en blanco y la puntuación como caracteres base para fines de comparación.

Tipo de datos: CollationAlternate
Valor predeterminado: CollationAlternate.NonIgnorable (los espacios y la puntuación se consideran caracteres base)

Alternate

maxVariable

(Opcional) Especifica qué caracteres considera el controlador como ignorables cuando el alternate argumento CollationAlternate.Shifted es.

Tipo de datos: CollationMaxVariable
Valor predeterminado: CollationMaxVariable.Punctuation (el controlador ignora la puntuación y los espacios)

MaxVariable

normalization

(Opcional) Especifica si el controlador normaliza el texto según sea necesario.

La mayoría del texto no requiere normalización. Para obtener más información sobre la normalización, consulte la documentación de ICU.

Tipo de datos: boolean
Predeterminado: false

Normalization

backwards

(Opcional) Especifica si las cadenas que contienen diacríticos se ordenan desde el final de la cadena hacia el principio.

Tipo de datos: boolean
Valor predeterminado: false

Backwards

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

Para aprender cómo realizar operaciones de guardar individuales, consulta los siguientes guías:

Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API: