Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

Operações de gravação em massa

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() ou IMongoCollection.BulkWriteAsync() para executar 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() ou IMongoClient.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 .

Os exemplos neste guia usam as coleções sample_restaurants.restaurants e sample_mflix.movies 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 MongoDB Get Started.

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.

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.

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.

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

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.

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

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.

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

BypassDocumentValidation

Especifica se a operação ignora a validação em nível de documento. Para obter mais informações, consulte Validação de esquema no manual do MongoDB Server .
O padrão False é.

Comment

Um comentário a ser anexado à operação, na forma de BsonValue um. Para obter mais informações, consulte o guia de campos de comando de exclusão no manual do MongoDB Server .

IsOrdered

TrueSe, o driver executa as operações de gravação na ordem fornecida. Se ocorrer um erro, as operações restantes não serão tentadas.

FalseSe, o driver executará as operações em uma ordem arbitrária e tentará executar todas as operações. Se qualquer uma das operações de escrita em uma escrita em massa não ordenada falhar, o driver relatará os erros somente depois de tentar todas as operações.
O True padrão é.

Let

Um mapa de nomes e valores de parâmetros, na forma de um BsonDocument. Os valores devem ser expressões constantes ou fechadas que não façam referência aos campos do documento . Para obter mais informações, consulte a declaração let no manual do MongoDB Server .

Os seguintes exemplos de código utilizam um objeto BulkWriteOptions para executar uma operação de escrita em massa não 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);

Os métodos BulkWrite() e BulkWriteAsync() retornam um objeto BulkWriteResult que contém as seguintes propriedades:

Propriedade
Descrição

IsAcknowledged

Indica se o servidor reconheceu a operação de gravação em massa. Se o valor desta propriedade for False e você tentar acessar qualquer outra propriedade do objeto BulkWriteResult, o driver lançará uma exceção.

DeletedCount

O número de documentos excluídos, se houver.

InsertedCount

O número de documentos inseridos, se houver.

MatchedCount

O número de documentos correspondentes para uma atualização, se aplicável.

ModifiedCount

O número de documentos modificados, se houver.

IsModifiedCountAvailable

Indica se a contagem modificada está disponível.

Upserts

Uma lista que contém informações sobre cada solicitação que resultou em uma operação upsert.

RequestCount

O número de solicitações na operação em massa.

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.

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 para o método BulkWrite() ou BulkWriteAsync() para executar a operação em massa.

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

collectionNamespace

O banco de dados e a coleção nos quais inserir o documento BSON.

Tipo de dados: string ou CollectionNamespace

document

O documento a inserir na coleção.

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

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

collectionNamespace

O banco de dados e a coleção nos quais inserir o documento BSON.

Tipo de dados: string ou CollectionNamespace

filter

O filtro de query que especifica os critérios utilizados para corresponder a documentos em sua coleção. A UpdateOne operação atualiza somente o primeiro documento que corresponde ao filtro de query.

Tipo de dados: FilterDefinition<TDocument>

update

A operação de atualização que você deseja executar. Para obter mais informações sobre operações de atualização, consulte Operadores de atualização de campo no manual do MongoDB Server .

Tipo de dados: UpdateDefinition<TDocument>

collation

Opcional. O agrupamento de idiomas a ser usado ao classificar os resultados. Consulte a seção

Agrupamento desta páginapara obter mais informações. Tipo de dados:
Padrão de agrupamento: null

hint

Opcional. O índice a ser usado para digitalizar documentos. Consulte o manual do MongoDB Server para obter mais informações.

Tipo de dados: BsonValue
padrão: null

isUpsert

Opcional. Especifica se a operação de atualização executará uma operação de upsert se nenhum documento corresponder ao filtro de consulta. Consulte o manual do MongoDB Server para obter mais informações.

Tipo de dados: boolean
Padrão: false

arrayFilters

Especifica quais elementos de array modificar para uma operação de atualização em um campo de array. Consulte o manual do MongoDB Server para obter mais informações.

Tipo de dados: IEnumerable<ArrayFilterDefinition>
Padrão: 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)")
);

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

collectionNamespace

O banco de dados e a coleção nos quais inserir o documento BSON.

Tipo de dados: string ou CollectionNamespace

filter

O filtro de query que especifica os critérios utilizados para corresponder a documentos em sua coleção. A UpdateOne operação atualiza somente o primeiro documento que corresponde ao filtro de query.

Tipo de dados: FilterDefinition<TDocument>

replacement

O documento de substituição, que especifica os campos e valores a serem inseridos no documento de destino.

Tipo de dados: TDocument

collation

Opcional. O agrupamento de idiomas a ser usado ao classificar os resultados. Consulte a seção

Agrupamento desta páginapara obter mais informações. Tipo de dados:
Padrão de agrupamento: null

hint

Opcional. O índice a ser usado para digitalizar documentos. Consulte o manual do MongoDB Server para obter mais informações.

Tipo de dados: BsonValue
padrão: null

isUpsert

Opcional. Especifica se a operação de atualização executará uma operação de upsert se nenhum documento corresponder ao filtro de consulta. Consulte o manual do MongoDB Server para obter mais informações.

Tipo de dados: boolean
Padrão: 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 }
}
);

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

collectionNamespace

O banco de dados e a coleção nos quais inserir o documento BSON.

Tipo de dados: string ou CollectionNamespace

filter

O filtro de query que especifica os critérios utilizados para corresponder a documentos em sua coleção. A DeleteOne operação exclui somente o primeiro documento que corresponde ao filtro de query.

Tipo de dados: FilterDefinition<TDocument>

collation

Opcional. O agrupamento de idiomas a ser usado ao classificar os resultados. Consulte a seção

Agrupamento desta páginapara obter mais informações. Tipo de dados:
Padrão de agrupamento: null

hint

Opcional. O índice a ser usado para digitalizar documentos. Consulte o manual do MongoDB Server para obter mais informações.

Tipo de dados: BsonValue
padrão: 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")
);

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)

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

BypassDocumentValidation

Especifica se a operação ignora a validação em nível de documento. Para obter mais informações, consulte Validação de esquema no manual do MongoDB Server .
O padrão false é.

Comment

Um comentário a ser anexado à operação, na forma de BsonValue um. Para obter mais informações, consulte o guia de campos de comando de exclusão no manual do MongoDB Server .

IsOrdered

trueSe, o driver executa as operações de gravação na ordem fornecida. Se ocorrer um erro, as operações restantes não serão tentadas.

falseSe, o driver executará as operações em uma ordem arbitrária e tentará executar todas as operações. Se qualquer uma das operações de escrita em uma escrita em massa não ordenada falhar, o driver relatará os erros somente depois de tentar todas as operações.
O True padrão é.

Let

Um mapa de nomes e valores de parâmetros, na forma de um BsonDocument. Os valores devem ser expressões constantes ou fechadas que não façam referência aos campos do documento . Para obter mais informações, consulte a declaração let no manual do MongoDB Server .

VerboseResult

Especifica se o ClientBulkWriteResult objeto retornado pela operação inclui resultados detalhados para cada operação de gravação bem-sucedida. O padrão
falseé.

WriteConcern

O preocupação de gravação a ser usado para a operação de gravação, como um valor do WriteConcern enumeração . O
padrão é a preocupação de gravação da collection na qual a operação está sendo executada.

Os seguintes exemplos de código utilizam um objeto ClientBulkWriteOptions para personalizar a operação de escrita em massa:

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

Os métodos BulkWrite() e BulkWriteAsync() retornam um objeto ClientBulkWriteResult que contém as seguintes propriedades:

Propriedade
Descrição

Acknowledged

Indica se o servidor reconheceu a operação de gravação em massa. Se o valor desta propriedade for false e você tentar acessar qualquer outra propriedade do objeto ClientBulkWriteResult, o driver lançará uma exceção.

DeleteResults

Um objeto IReadOnlyDictionary<int, BulkWriteDeleteResult> contendo os resultados de cada operação de exclusão bem-sucedida, se houver.

DeletedCount

O número de documentos excluídos, se houver.

InsertResults

Um objeto IReadOnlyDictionary<int, BulkWriteInsertOneResult> contendo os resultados de cada operação de inserção bem-sucedida, se houver.

InsertedCount

O número de documentos inseridos, se houver.

MatchedCount

O número de documentos correspondentes para uma atualização, se aplicável.

ModifiedCount

O número de documentos modificados, se houver.

UpsertResults

Um objeto IReadOnlyDictionary<int, BulkWriteUpdateResult> contendo os resultados de cada operação de atualização bem-sucedida, se houver.

UpsertedCount

O número de documentos atualizados, se houver.

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

connectionId

O identificador da conexão.

Tipo de dados: ConnectionId

message

A mensagem de erro.

Tipo de dados: string

writeErrors

Um dicionário de erros que ocorreram durante a operação de gravação em massa.

Tipo de Dados: IReadOnlyDictionary<int, WriteError>

partialResult

Os resultados de quaisquer operações bem-sucedidas realizadas antes de a exceção ser lançada.

Tipo de dados: ClientBulkWriteResult

writeConcernErrors

Erros de write concern que ocorreram durante a execução da operação de escrita em massa.

Tipo de dados: IReadOnlyList

innerException

A exceção interna.

Tipo de dados: Exceção

Para configurar o agrupamento para sua operação, crie uma instância da classe Agrupamento.

A tabela seguinte descreve os parâmetros que o construtor do Collation aceita. Ela também lista a propriedade de classe correspondente que você pode usar para ler o valor de cada configuração.

Parâmetro
Descrição
Propriedade de classe

locale

Especifica a locale Componentes internacionais para Unicode (ICU). Para obter uma lista de localidades suportadas, consulte Localidades de Agrupamento e Parâmetros Padrão no Manual do MongoDB Server .

Se você quiser usar a comparação binária simples, use a Collation.Simple propriedade estática para retornar um Collation objeto com o locale definido "simple" como.
Tipo de dados: string

Locale

caseLevel

(Opcional) Especifica se incluir comparação de caso.

Quando esse argumento true é, o comportamento do driver depende do valor do strength argumento:

- Se strength CollationStrength.Primaryfor, o driver compara caracteres básicos e maiúsculas e minúsculas.
- strength Se CollationStrength.Secondary for, o driver compara caracteres básicos, diacríticos, outras diferenças secundárias e maiúsculas e minúsculas.
- Se strength for qualquer outro valor, esse argumento será ignorado.

Quando esse argumento false é, o driver não inclui comparação de caso no nível de força Primary Secondaryou.

Tipo de Dados: boolean
Padrão: false

CaseLevel

caseFirst

(Opcional) Especifica a ordem de classificação das diferenças de caso durante as comparações de nível terciário.

Tipo de dados: CollationCaseFirst
padrão: CollationCaseFirst.Off

CaseFirst

strength

(Opcional) Especifica o nível de comparação a ser executado, conforme definido na documentação da ICU.

Tipo de Dados: CollationStrength
Padrão: CollationStrength.Tertiary

Strength

numericOrdering

(Opcional) Especifica se o driver compara strings numéricas como números.

Se esse argumento true for, o driver compara strings numéricas como números. Por exemplo, ao comparar as strings "10" e "2", o driver trata os valores como 10 e 2 e considera 10 maior.

Se esse argumento for false ou excluído, o driver compara cadeias de caracteres numéricas como cadeias de caracteres. Por exemplo, ao comparar as strings "10" e "2", o driver compara um caractere de cada vez. Como "1" é menor que "2", o driver acha que "10" é menor que "2".

Para obter mais informações, consulte Restrições de agrupamento no manual do MongoDB Server .

Tipo de dados: boolean
Padrão: false

NumericOrdering

alternate

(Opcional) Especifica se o driver considera o espaço em branco e a pontuação como caracteres básicos para fins de comparação.

Tipo de dados: CollationAlterne
padrão: CollationAlternate.NonIgnorable (espaços e pontuação são considerados caracteres básicos)

Alternate

maxVariable

(Opcional) Especifica quais caracteres o driver considera ignoráveis quando o alternate argumento CollationAlternate.Shifted é.

Tipo de Dados: CollationMaxVariable
Padrão: CollationMaxVariable.Punctuation (o driver ignora pontuação e espaços)

MaxVariable

normalization

(Opcional) Especifica se o driver normaliza o texto conforme necessário.

A maioria dos textos não exige normalização. Para obter mais informações sobre normalização, consulte a documentação da ICU.

Tipo de dados: boolean
Padrão: false

Normalization

backwards

(Opcional) Especifica se as strings contendo diacríticos são classificadas da parte de trás da string para a frente.

Tipo de dados: boolean
Padrão: false

Backwards

Para obter mais informações sobre agrupamento, consulte a página Agrupamento no manual do MongoDB Server.

Para saber como realizar operações de escrita individuais, consulte os seguintes guias:

Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: