Operações de gravação em massa
Nesta página
- Visão geral
- Dados de amostra
- Gravação em massa de collections
- Inserir operações
- Atualizar operações
- Operações de substituição
- Excluir operações
- Executar a operação em massa
- Personalizar operação de gravação em massa
- Valor de retorno
- Tratamento de exceções
- Gravação em massa do cliente
- Inserir operações
- Atualizar operações
- Operações de substituição
- Excluir operações
- Executar a operação em massa
- Personalizar escrita em massa
- Valor de retorno
- Tratamento de exceções
- Informações adicionais
- Documentação da API
Visão geral
Neste guia, você aprenderá a executar várias operações de gravação em uma única chamada de banco de dados de dados usando operações de gravação em massa.
Considere um cenário no qual você deseja inserir um documento, atualizar vários outros documentos e excluir um documento. Se você usar métodos individuais, cada operação exigirá sua própria chamada de banco de dados .
Ao usar uma operação de gravação em massa, você pode executar várias operações de gravação em menos chamadas de banco de dados . Você pode realizar operações de gravação em massa nos seguintes níveis:
Collection: você pode usar o método
IMongoCollection.BulkWrite()
ouIMongoCollection.BulkWriteAsync()
para realizar operações de escrita em massa em uma única collection. Esses métodos fazem uma chamada de banco de dados para cada tipo de operação de gravação. Por exemplo, os métodos executam várias operações de atualização em uma chamada, mas fazem duas chamadas separadas para o banco de dados para uma operação de inserção e uma operação de substituição.Cliente: se o seu aplicação se conectar à versão 8.0 do MongoDB Server ou posterior, você poderá usar o método
IMongoClient.BulkWrite()
ouIMongoClient.BulkWriteAsync()
para executar operações de gravação em massa em várias coleções e bancos de dados no mesmo cluster. Este método executa todas as operações de gravação em uma chamada de banco de dados .
Dados de amostra
Os exemplos neste guia usam as sample_restaurants.restaurants
sample_mflix.movies
collections e dos conjuntos de dados de amostra do Atlas . Para saber como criar um cluster MongoDB Atlas gratuito e carregar os conjuntos de dados de amostra, consulte o guia Iniciar com Atlas .
Dica
Operações de gravação em massa com POCOs
Os exemplos neste guia usam o tipo BsonDocument
para o tipo TDocument
em todas as classes genéricas. Você também pode usar um objeto antigo e simples de CLR (POCO) para essas classes. Para fazer isso, você deve definir uma classe que represente os documentos em sua coleção. A classe deve ter propriedades que correspondam aos campos em seus documentos. Para obter mais informações, consulte POCOs.
Gravação em massa de collections
As operações de gravação em massa contêm uma ou mais operações de gravação. Para cada operação de gravação que você deseja executar, crie uma instância de uma das seguintes classes da WriteModel<TDocument>
:
DeleteManyModel<TDocument>
DeleteOneModel<TDocument>
InsertOneModel<TDocument>
ReplaceOneModel<TDocument>
UpdateManyModel<TDocument>
UpdateOneModel<TDocument>
As seções a seguir mostram como criar e usar instâncias das classes anteriores para executar a operação de gravação correspondente em uma operação de gravação em massa. A seção Executar a operação em massa demonstra como passar uma lista de modelos para o método BulkWrite()
ou BulkWriteAsync()
para executar a operação em massa.
Inserir operações
Para executar uma operação de inserção, crie uma instância do InsertOneModel<TDocument>
e especifique o documento que você deseja inserir.
O exemplo seguinte cria uma instância da classe InsertOneModel<BsonDocument>
. Essa instância direciona o driver a inserir um documento no qual o campo "name"
é "Mongo's Deli"
na coleção restaurants
.
var insertOneModel = new InsertOneModel<BsonDocument>( new BsonDocument{ { "name", "Mongo's Deli" }, { "cuisine", "Sandwiches" }, { "borough", "Manhattan" }, { "restaurant_id", "1234" } } );
Para inserir vários documentos, crie uma instância de InsertOneModel<TDocument>
para cada documento.
Importante
Erro de chave duplicada
Ao executar uma operação em massa, o InsertOneModel<TDocument>
não pode inserir um documento com um _id
que já existe na coleção. Nessa situação, o driver lança um MongoBulkWriteException
.
Atualizar operações
Para atualizar um único documento, crie uma instância de UpdateOneModel<TDocument>
e passe os seguintes argumentos:
Filtro de query que especifica os critérios usados para corresponder aos documentos em sua coleção. Para saber mais sobre como especificar uma query, consulte Operadores de query e projeção no manual do MongoDB Server.
documento de atualização que descreve a atualização a ser executada. Para saber mais sobre como especificar uma atualização, consulte Operadores de atualização no manual do MongoDB Server.
Uma instância UpdateOneModel<TDocument>
especifica uma atualização para o primeiro documento que corresponde ao seu filtro de query.
No seguinte exemplo de código, o objeto UpdateOneModel<BsonDocument>
representa uma operação de atualização na coleção restaurants
. A operação corresponde ao primeiro documento na collection em que o valor do campo name
é "Mongo's Deli"
. Em seguida, ele atualiza o valor do campo cuisine
no documento correspondente para "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 atualizar vários documentos, crie uma instância de UpdateManyModel<TDocument>
e passe os mesmos argumentos de UpdateOneModel<TDocument>
. A classe UpdateManyModel<TDocument>
especifica atualizações para todos os documentos que correspondem ao seu filtro de query.
No seguinte exemplo de código, o objeto UpdateManyModel<BsonDocument>
representa uma operação de atualização na coleção restaurants
. A operação corresponde a todos os documentos na coleção onde o valor do campo name
é "Mongo's Deli"
. Em seguida, ele atualiza o valor do campo cuisine
para "Sandwiches and Salads"
.
var updateManyModel = new UpdateManyModel<BsonDocument>( Builders<BsonDocument>.Filter.Eq("name", "Mongo's Deli"), Builders<BsonDocument>.Update.Set("cuisine", "Sandwiches and Salads") );
Operações de substituição
Uma operação de substituição remove todos os campos e valores de um documento especificado e os substitui por novos campos e valores especificados por você. Para executar uma operação de substituição, crie uma instância de ReplaceOneModel<TDocument>
e passe um filtro de query e os campos e valores pelos quais você deseja substituir o documento correspondente.
No exemplo a seguir, o objeto ReplaceOneModel<BsonDocument>
representa uma operação de substituição na coleção restaurants
. A operação corresponde ao documento na coleção onde o valor do campo restaurant_id
é "1234"
. Em seguida, ele remove todos os campos exceto _id
deste documento e define novos valores nos campos name
, cuisine
, borough
e 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 substituir vários documentos, você deve criar uma instância de ReplaceOneModel<TDocument>
para cada documento.
Excluir operações
Para excluir um documento, crie uma instância de DeleteOneModel<TDocument>
e passe um filtro de query especificando o documento que deseja excluir. Uma instância do DeleteOneModel<TDocument>
fornece instruções para excluir somente o primeiro documento que corresponde ao seu filtro de query.
No seguinte exemplo de código, o objeto DeleteOneModel<BsonDocument>
representa uma operação de exclusão na coleção restaurants
. A operação corresponde e exclui o primeiro documento onde o valor do campo restaurant_id
é "5678"
.
var deleteOneModel = new DeleteOneModel<BsonDocument>( Builders<BsonDocument>.Filter.Eq("restaurant_id", "5678") );
Para excluir vários documentos, crie uma instância de DeleteManyModel<TDocument>
e passe um filtro de query especificando os documentos que deseja excluir. Uma instância de DeleteManyModel<TDocument>
fornece instruções para remover todos os documentos que correspondem ao seu filtro de query.
No seguinte exemplo de código, o objeto DeleteManyModel<BsonDocument>
representa uma operação de exclusão na coleção restaurants
. A operação corresponde e exclui todos os documentos onde o valor do campo name
é "Mongo's Deli"
.
var deleteManyModel = new DeleteManyModel<BsonDocument>( Builders<BsonDocument>.Filter.Eq("name", "Mongo's Deli") );
Executar a operação em massa
Após definir uma instância WriteModel
para cada operação que deseja executar, crie uma instância de uma classe que implemente a interface IEnumerable
. Adicione seus objetos WriteModel
a este IEnumerable
e, em seguida, passe o IEnumerable
para o método BulkWrite()
ou BulkWriteAsync()
. Por padrão, esses métodos executam as operações na ordem em que são definidos na lista.
Dica
IEnumerable
Array
e List
são duas classes comuns que implementam a interface do IEnumerable
.
Selecione a partir das seguintes guias para visualizar como utilizar o método BulkWrite()
síncrono e o método BulkWriteAsync()
assíncrono para executar uma operação de gravação em massa na coleção 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);
Os exemplos de código anteriores produzem a seguinte saída:
MongoDB.Driver.BulkWriteResult1+Acknowledged[MongoDB.Bson.BsonDocument]
Observação
Quando o driver executa uma operação em massa, ele usa a preocupação de gravação da collection de destino. O driver relata todos os erros de preocupação de gravação depois de tentar todas as operações, independentemente da ordem de execução.
Personalizar operação de gravação em massa
Quando você chama o método BulkWrite()
ou BulkWriteAsync()
, você pode passar uma instância da classe BulkWriteOptions
. A classe BulkWriteOptions
contém as seguintes propriedades, que representam opções que você pode utilizar para configurar a operação de escrita em massa:
Propriedade | Descrição |
---|---|
| 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. |
Os seguintes exemplos de código utilizam um objeto BulkWriteOptions
para executar uma operação de escrita em massa não ordenada:
Valor de retorno
Os métodos BulkWrite()
e BulkWriteAsync()
retornam um objeto BulkWriteResult
que contém as seguintes propriedades:
Propriedade | Descrição |
---|---|
| 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. |
Tratamento de exceções
Se qualquer uma das operações em uma operação de gravação em massa falhar, o Driver .NET/C# lançará um BulkWriteError
e não executará nenhuma operação adicional.
Um objeto BulkWriteError
contém a propriedade Index
que descreve o índice da solicitação que resultou em um erro.
Gravação em massa do cliente
Ao conectar a uma implementação executando o MongoDB Server 8.0 ou posterior, você pode usar o método IMongoClient.BulkWrite()
ou IMongoClient.BulkWriteAsync()
para gravar em vários bancos de dados e coleções no mesmo cluster. Esses métodos executam todas as operações de gravação em uma única chamada.
Para cada operação de gravação que você deseja executar, crie uma instância de uma das seguintes classes da BulkWriteModel
:
BulkWriteInsertOneModel<TDocument>
BulkWriteUpdateOneModel<TDocument>
BulkWriteUpdateManyModel<TDocument>
BulkWriteReplaceOneModel<TDocument>
BulkWriteDeleteOneModel<TDocument>
BulkWriteDeleteManyModel<TDocument>
As seções a seguir mostram como criar e usar instâncias das classes anteriores para executar a operação de gravação correspondente em uma gravação em massa. A seção Executar a operação em massa demonstra como passar uma lista de modelos BulkWrite()
para BulkWriteAsync()
o método ou para executar a operação em massa.
Inserir operações
Para executar uma operação de inserção, crie uma instância da classe BulkWriteInsertOneModel<TDocument>
. O construtor do BulkWriteInsertOneModel<TDocument>
aceita os seguintes parâmetros:
Parâmetro | Descrição |
---|---|
| 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 |
O exemplo seguinte cria instâncias da classe BulkWriteInsertOneModel<TDocument>
. Essas instâncias direcionam o driver a inserir documentos nas coleções sample_restaurants.restaurants
e 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 } } );
Atualizar operações
Para atualizar um único documento, crie uma instância da classe BulkWriteUpdateOneModel<TDocument>
. O construtor do BulkWriteUpdateOneModel<TDocument>
aceita os seguintes parâmetros:
Parâmetro | Descrição |
---|---|
| 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 language collation to use when sorting results. See the
{+mdb+server+} manual
for more information. Data Type: Collation Default: null |
| 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: boolean Default: 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 |
No seguinte exemplo de código , os objetos BulkWriteUpdateOneModel<BsonDocument>
representam operações de atualização nas coleções sample_restaurants.restaurants
e 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 atualizar vários documentos, crie uma instância da classe BulkWriteUpdateManyModel<TDocument>
. O construtor desta classe aceita os mesmos parâmetros que o construtor BulkWriteUpdateOneModel<TDocument>
. A BulkWriteUpdateManyModel<TDocument>
operação atualiza todos os documentos que correspondem ao seu filtro de query.
No seguinte exemplo de código, o objeto BulkWriteUpdateManyModel<BsonDocument>
representa uma operação de atualização na coleção sample_restaurants.restaurants
. A operação corresponde a todos os documentos na coleção onde o valor do campo name
é "Starbucks"
. Em seguida, ele atualiza o valor do campo cuisine
para "Coffee (Chain)"
.
var updateManyModel = new BulkWriteUpdateManyModel<BsonDocument>( "sample_restaurants.restaurants", Builders<BsonDocument>.Filter.Eq("name", "Starbucks"), Builders<BsonDocument>.Update.Set("cuisine", "Coffee (Chain)") );
Operações de substituição
Para substituir os campos em um documento, crie uma instância da classe BulkWriteReplaceOneModel<TDocument>
. O construtor do BulkWriteReplaceOneModel<TDocument>
aceita os seguintes parâmetros:
Parâmetro | Descrição |
---|---|
| 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 language collation to use when sorting results. See
the MongoDB Server manual
for more information. Data Type: Collation Default: null |
| 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: boolean Default: false |
No exemplo a seguir, os objetos BulkWriteReplaceOneModel<BsonDocument>
representam operações de substituição nas collections sample_restaurants.restaurants
e 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 } } );
Excluir operações
Para excluir um documento, crie uma instância da classe BulkWriteDeleteOneModel<TDocument>
. O construtor do BulkWriteDeleteOneModel<TDocument>
aceita os seguintes parâmetros:
Parâmetro | Descrição |
---|---|
| 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 language collation to use when sorting results. See
the MongoDB Server manual
for more information. Data Type: Collation Default: null |
| Optional. The index to use to scan for documents.
See the MongoDB Server manual
for more information. Data Type: BsonValue Default: null |
No seguinte exemplo de código , os objetos BulkWriteDeleteOneModel<BsonDocument>
representam operações de exclusão nas collections sample_restaurants.restaurants
e 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 excluir vários documentos, crie uma instância da classe BulkWriteDeleteManyModel<TDocument>
e passe um filtro de query que especifique o documento que você deseja excluir. A DeleteMany
operação remove todos os documentos que correspondem ao seu filtro de query.
No seguinte exemplo de código, o objeto BulkWriteDeleteManyModel<BsonDocument>
representa uma operação de exclusão na coleção sample_restaurants.restaurants
. A operação corresponde e exclui todos os documentos onde o valor do campo name
é "Mongo's Deli"
.
var deleteManyModel = new BulkWriteDeleteManyModel<BsonDocument>( "sample_restaurants.restaurants", Builders<BsonDocument>.Filter.Eq("name", "Mongo's Deli") );
Executar a operação em massa
Após definir uma instância BulkWriteModel
para cada operação que deseja executar, crie uma instância de uma classe que implemente a interface IReadOnlyList
. Adicione seus BulkWriteModel
objetos a este IReadOnlyList
e, em seguida, passe o IReadOnlyList
para o método BulkWrite()
ou BulkWriteAsync()
. Por padrão, esses métodos executam as operações na ordem em que são definidos na coleção.
Dica
IReadOnlyList
Array
e List
são duas classes comuns que implementam a interface do IReadOnlyList
.
Selecione a partir das seguintes guias para ver como usar o método síncrono BulkWrite()
e o método assíncrono BulkWriteAsync()
para executar uma operação de gravação em massa em vários namespaces.
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);
Os exemplos de código anteriores produzem a seguinte saída:
BulkWriteResult({'writeErrors': [], 'writeConcernErrors': [], 'nInserted': 2, 'nUpserted': 0, 'nMatched': 2, 'nModified': 2, 'nRemoved': 1, 'upserted': []}, acknowledged=True)
Personalizar escrita em massa
Quando você chama o método BulkWrite()
ou BulkWriteAsync()
, você pode passar uma instância da classe ClientBulkWriteOptions
. A classe ClientBulkWriteOptions
contém as seguintes propriedades, que representam opções que você pode utilizar para configurar a operação de escrita em massa:
Propriedade | Descrição |
---|---|
| 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. |
Os seguintes exemplos de código utilizam um objeto ClientBulkWriteOptions
para personalizar a operação de escrita em massa:
Valor de retorno
Os métodos BulkWrite()
e BulkWriteAsync()
retornam um objeto ClientBulkWriteResult
que contém as seguintes propriedades:
Propriedade | Descrição |
---|---|
| 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. |
Tratamento de exceções
Se qualquer uma das operações em uma operação de gravação em massa falhar, o Driver .NET/C# lançará um ClientBulkWriteException
e não executará nenhuma operação adicional.
Um objeto ClientBulkWriteException
contém as seguintes propriedades:
Propriedade | Descrição |
---|---|
| |
| 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> |
|
Informações adicionais
Para saber como realizar operações de escrita individuais, consulte os seguintes guias:
Documentação da API
Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API:
Gravação em massa de collections
Gravação em massa do cliente