Menu Docs
Página inicial do Docs
/ / /
Driver C
/

Operações de gravação em massa

Nesta página

  • Visão geral
  • Dados de amostra
  • Iniciar a operação de gravação em massa
  • Definir as operações de gravação
  • Inserir operações
  • Atualizar operações
  • Operações de substituição
  • Excluir operações
  • Executar a operação em massa
  • Personalizar operações de gravação em massa
  • Informações adicionais
  • Documentação da API

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 em uma coleção, atualizar vários outros documentos e excluir um documento. Se você usar funções individuais, cada operação exigirá sua própria chamada de banco de dados de dados. Em vez disso, você pode usar uma operação em massa para reduzir o número de chamadas para o banco de dados de dados.

Os exemplos neste guia utilizam a coleção do restaurants no banco de dados de dados do sample_restaurants a partir 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 .

Antes de executar uma operação de gravação em massa, chame a função mongoc_collection_create_bulk_operation_with_opts(). Esta função retorna um valor do tipo mongoc_bulk_operation_t que você pode usar para armazenar instruções sobre quais gravações em massa devem ser executadas.

A função mongoc_collection_create_bulk_operation_with_opts() aceita os seguintes parâmetros:

  • Collection: especifica a collection a ser modificada

  • documento de opções : especifica opções para personalizar a operação ou NULL

O exemplo a seguir chama a função mongoc_collection_create_bulk_operation_with_opts() e passa a coleção restaurants como um parâmetro:

mongoc_bulk_operation_t *bulk =
mongoc_collection_create_bulk_operation_with_opts (collection, NULL);

Em seguida, você pode adicionar instruções de escrita à operação em massa. Para obter mais informações, consulte a seguinte seção Definir as operações de gravação .

Você pode definir uma operação de gravação e adicioná-la à gravação em massa ligando para os seguintes métodos:

  • mongoc_bulk_operation_insert_with_opts()

  • mongoc_bulk_operation_update_one_with_opts()

  • mongoc_bulk_operation_update_many_with_opts()

  • mongoc_bulk_operation_replace_one_with_opts()

  • mongoc_bulk_operation_remove_one_with_opts()

  • mongoc_bulk_operation_remove_many_with_opts()

As seções a seguir mostram como usar esses métodos para especificar suas operações de gravação correspondentes.

Para executar uma operação de inserção, adicione as instruções de inserção ao mongoc_bulk_operation_t, que classifica a operação como parte da gravação em massa.

O exemplo a seguir chama a função mongoc_bulk_operation_insert_with_opts(), passando o documento para inserir e o valor mongoc_bulk_operation_t como parâmetros:

bson_t *insert_doc = BCON_NEW (
"name", BCON_UTF8 ("Mongo's Deli"),
"cuisine", BCON_UTF8 ("Sandwiches"),
"borough", BCON_UTF8 ("Manhattan"),
"restaurant_id", BCON_UTF8 ("1234")
);
bson_error_t error;
if (!mongoc_bulk_operation_insert_with_opts (bulk, insert_doc, NULL, &error)) {
fprintf (stderr, "Failed to add insert operation: %s\n", error.message);
}
bson_destroy (insert_doc);

Para inserir vários documentos, chame mongoc_bulk_operation_insert_with_opts() para cada documento.

Para executar uma operação de atualização, adicione as instruções de atualização ao mongoc_bulk_operation_t, que enfileira a operação como parte da gravação em massa.

O exemplo a seguir chama a função mongoc_bulk_operation_update_one_with_opts(), passando um filtro de query, atualizações de documento e o valor mongoc_bulk_operation_t como parâmetros:

bson_t *filter_doc = BCON_NEW ("name", BCON_UTF8 ("Mongo's Deli"));
bson_t *update_doc = BCON_NEW ("$set", "{", "cuisine", BCON_UTF8 ("Sandwiches and Salads"), "}");
bson_error_t error;
if (!mongoc_bulk_operation_update_one_with_opts (bulk, filter_doc, update_doc, NULL, &error)) {
fprintf (stderr, "Failed to add update operation: %s\n", error.message);
}
bson_destroy (filter_doc);
bson_destroy (update_doc);

Para atualizar vários documentos, chame mongoc_bulk_operation_update_many_with_opts() e passe os mesmos parâmetros. Isso instrui o driver a atualizar todos os documentos que correspondem ao seu filtro de consulta.

O exemplo a seguir enfileira uma operação de atualização de muitos para a escrita em massa:

bson_t *filter_doc = BCON_NEW ("name", BCON_UTF8 ("Mongo's Deli"));
bson_t *update_doc = BCON_NEW ("$set", "{", "cuisine", BCON_UTF8 ("Sandwiches and Salads"), "}");
bson_error_t error;
if (!mongoc_bulk_operation_update_many_with_opts (bulk, filter_doc, update_doc, NULL, &error)) {
fprintf (stderr, "Failed to add update operation: %s\n", error.message);
}
bson_destroy (filter_doc);
bson_destroy (update_doc);

Uma operação de substituição remove todos os campos e valores de um documento especificado e os substitui por novos. Para executar uma operação de substituição, adicione as instruções de substituição ao mongoc_bulk_operation_t, que classifica a operação como parte da gravação em massa.

O exemplo a seguir chama a função mongoc_bulk_operation_replace_one_with_opts(), passando um filtro de query, um documento de substituição e o valor mongoc_bulk_operation_t como parâmetros:

bson_t *filter_doc = BCON_NEW ("restaurant_id", BCON_UTF8 ("1234"));
bson_t *replace_doc = BCON_NEW (
"name", BCON_UTF8 ("Mongo's Deli"),
"cuisine", BCON_UTF8 ("Sandwiches and Salads"),
"borough", BCON_UTF8 ("Brooklyn"),
"restaurant_id", BCON_UTF8 ("5678")
);
bson_error_t error;
if (!mongoc_bulk_operation_replace_one_with_opts (bulk, filter_doc, replace_doc, NULL, &error)) {
fprintf (stderr, "Failed to add replace operation: %s\n", error.message);
}
bson_destroy (filter_doc);
bson_destroy (replace_doc);

Para substituir vários documentos, chame mongoc_bulk_operation_replace_one_with_opts() para cada documento.

Para executar uma operação de exclusão, adicione as instruções de exclusão ao mongoc_bulk_operation_t, que enfileira a operação como parte da gravação em massa.

O exemplo seguinte chama a função mongoc_bulk_operation_remove_one_with_opts(), passando um filtro de query e o valor mongoc_bulk_operation_t como parâmetros:

bson_t *filter_doc = BCON_NEW ("restaurant_id", BCON_UTF8 ("5678"));
bson_error_t error;
if (!mongoc_bulk_operation_remove_one_with_opts (bulk, filter_doc, NULL, &error)) {
fprintf (stderr, "Failed to add delete operation: %s\n", error.message);
}
bson_destroy (filter_doc);

Para excluir vários documentos, chame a mongoc_bulk_operation_remove_many_with_opts() função e passe os mesmos parâmetros. Isso instrui o driver a excluir todos os documentos que correspondem ao seu filtro de query.

O exemplo a seguir enfileira uma operação de exclusão de muitos para a gravação em massa:

bson_t *filter_doc = BCON_NEW ("borough", BCON_UTF8 ("Manhattan"));
bson_error_t error;
if (!mongoc_bulk_operation_remove_many_with_opts (bulk, filter_doc, NULL, &error)) {
fprintf (stderr, "Failed to add delete operation: %s\n", error.message);
}
bson_destroy (filter_doc);

Para executar cada operação de gravação enfileirada na gravação em massa, chame a função mongoc_bulk_operation_execute(). Esta função aceita os seguintes parâmetros:

  • valor mongoc_bulk_operation_t: contém as instruções para cada operação de gravação

  • Localização dos resultados: especifica um ponteiro para o armazenamento substituível que conterá os resultados da operação ou NULL

  • Local do erro: especifica um local para um valor de erro ou NULL

O exemplo a seguir executa as operações de inserção, atualização, substituição e exclusão especificadas nas seções anteriores deste guia chamando a mongoc_bulk_operation_execute() função:

bson_error_t error;
bool result = mongoc_bulk_operation_execute (bulk, NULL, &error);
if (!result) {
printf ("Bulk operation error: %s\n", error.message);
}
mongoc_bulk_operation_destroy (bulk);

Se qualquer uma das operações de gravação falhar, o driver C definirá o erro de saída e não executará mais nenhuma operação.

Você pode modificar o comportamento da função mongoc_collection_create_bulk_operation_with_opts() passando um documento BSON que especifica os valores das opções. A tabela a seguir descreve as opções que você pode definir no documento:

Opção
Descrição
ordered
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.
Defaults to true.
writeConcern
Specifies the write concern for the bulk operation. For more information, see Write Concern in the MongoDB Server manual.
sessionId
Runs the bulk operations within the specified session. For more information, see Server Sessions in the MongoDB Server manual.
comment
Attaches a comment to the operation. For more information, see the delete command fields guide in the MongoDB Server manual.
let
Specifies a document with a list of values to improve operation readability. 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.

O exemplo a seguir chama a função mongoc_collection_create_bulk_operation_with_opts() e define a opção ordered como false:

bson_t opts;
BSON_APPEND_BOOL (&opts, "ordered", false);
bulk = mongoc_collection_create_bulk_operation_with_opts (collection, &opts);
// Perform bulk operation
bson_destroy (&opts);
mongoc_bulk_operation_destroy (bulk);

Se qualquer uma das operações de gravação em uma gravação em massa não ordenada falhar, o driver C relatará os erros somente depois de tentar todas as operações.

Observação

Operações em massa não ordenadas não garantem ordem de execução. A ordem pode ser diferente da forma como você os lista para otimizar o tempo de execução.

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

  • Insira documentos

  • Atualize documentos

  • Exclua documentos

  • Substituir documentos

Para saber mais sobre qualquer uma das funções ou tipos discutidos neste guia, consulte a seguinte documentação da API:

Voltar

Exclua documentos