Menu Docs

Página inicial do DocsGo

Operações em massa

Nesta página

  • Visão geral
  • Dados de amostra
  • Gravação em massa
  • Modificar comportamento
  • Return Values
  • operações
  • Insert
  • Substituir
  • Update
  • Excluir
  • Ordem de execução
  • Pedido
  • Não ordenado
  • Informações adicionais
  • Operações relacionadas
  • Documentação da API

Neste guia, você verá como usar as operações em massa.

As operações em massa executam um grande número de operações de gravação. Em vez de fazer uma chamada para cada operação no banco de dados, as operações em massa executam várias operações com uma única chamada ao banco de dados.

Para executar o exemplo nesta aba, carregue os dados de amostra na collection tea.ratings com o seguinte trecho:

coll := client.Database("tea").Collection("ratings")
docs := []interface{}{
bson.D{{"type", "Masala"}, {"rating", 10}},
bson.D{{"type", "Earl Grey"}, {"rating", 5}},
}
result, err := coll.InsertMany(context.TODO(), docs)
if err != nil {
panic(err)
}
fmt.Printf("Number of documents inserted: %d\n", len(result.InsertedIDs))

Dica

Bancos de Dados e Coleções Inexistentes

Se o banco de dados e a collection necessários não existirem quando você executar uma operação de escrita, o servidor implicitamente os criará.

Cada documento contém uma classificação para um tipo de chá que corresponde aos campos type e rating .

Observação

Cada exemplo trunca o valor ObjectID porque o driver o gera exclusivamente.

Para executar uma operação em massa, passe uma fatia de documentos WriteModel para o método BulkWrite() .

Opcionalmente, o método BulkWrite() usa o tipo BulkWriteOptions, que representa as opções que você pode usar para modificar seu comportamento. Se você não especificar um BulkWriteOptions, o driver utilizará os valores padrão para cada opção.

O tipo BulkWriteOptions permite a você configurar opções com os seguintes métodos:

Método
Descrição
SetBypassDocumentValidation()
Whether to allow the write to opt-out of document level validation.
Default: false
SetOrdered()
Whether to stop performing write operations after an error occurs.
Default: true

O método BulkWrite() retorna um tipo BulkWriteResult, que contém informações sobre a operação em massa, se ela for bem-sucedida. O tipo BulkWriteResult contém as seguintes propriedades:

Propriedade
Descrição
InsertedCount
O número de documentos inseridos.
MatchedCount
O número de documentos correspondidos pelo filtro de query nas operações de atualização e substituição.
ModifiedCount
O número de documentos modificados por atualização e substituição de operações.
DeletedCount
O número de documentos excluídos.
UpsertedCount
O número de documentos atualizados por atualização e substituição de operações.
UpsertedIDs
Um mapa de um índice de operação para o _id de cada documento atualizado.

Um WriteModel representa uma operação de inserção, substituição, atualização ou exclusão.

Para executar uma operação de inserção, crie um InsertOneModel especificando o documento que você deseja inserir. Para inserir vários documentos, crie um InsertOneModel para cada documento que você deseja inserir.

O InsertOneModel permite a você especificar seu comportamento com o seguinte método:

Método
Descrição
SetDocument()
The document to insert.

Este exemplo seguinte cria duas instâncias do InsertOneModel para inserir dois documentos:

models := []mongo.WriteModel{
mongo.NewInsertOneModel().SetDocument(bson.D{{"type", "Oolong"}, {"rating", 9}}),
mongo.NewInsertOneModel().SetDocument(bson.D{{"type", "Assam"}, {"rating", 6}}),
}

Para executar uma operação de substituição, crie um ReplaceOneModel especificando o documento que deseja substituir e um documento de substituição. Para substituir vários documentos, crie um ReplaceOneModel para cada documento que deseja substituir.

O ReplaceOneModel permite a você especificar seu comportamento com os seguintes métodos:

Método
Descrição
SetCollation()
The type of language collation to use when sorting results.
SetFilter()
The query filter specifying which document to replace.
SetHint()
The index to use to scan for documents.
SetReplacement()
The document to replace the matched document with.
SetUpsert()
Whether to insert a new document if the query filter doesn't match any documents.

O exemplo a seguir cria um ReplaceOneModel para substituir um documento onde o type é "Earl Gris" por um documento onde o type é "Matcha" e o rating é 8:

models := []mongo.WriteModel{
mongo.NewReplaceOneModel().SetFilter(bson.D{{"type", "Earl Grey"}}).
SetReplacement(bson.D{{"type", "Matcha"}, {"rating", 8}}),
}

Para executar uma operação de atualização, crie um UpdateOneModel especificando o documento que você deseja atualizar e um documento de atualização. Para atualizar vários documentos, use o UpdateManyModel.

O UpdateOneModel e UpdateManyModel permitem a você especificar seu comportamento com os seguintes métodos:

Método
Descrição
SetArrayFilters()
The array elements the update applies to.
SetCollation()
The type of language collation to use when sorting results.
SetFilter()
The query filter specifying which document to update.
SetHint()
The index to use to scan for documents.
SetUpdate()
The modifications to apply on the matched documents.
SetUpsert()
Whether to insert a new document if the query filter doesn't match any documents.

O exemplo a seguir cria um UpdateOneModel para diminuir a rating 2 se o type for "Masala":

models := []mongo.WriteModel{
mongo.NewUpdateOneModel().SetFilter(bson.D{{"type", "Masala"}}).
SetUpdate(bson.D{{"$inc", bson.D{{"rating", -2}}}}),
}

Para executar uma operação de exclusão, crie um DeleteOneModel especificando o documento que você deseja excluir. Para excluir vários documentos, use o DeleteManyModel.

O DeleteOneModel e DeleteManyModel permitem a você especificar seu comportamento com os seguintes métodos:

Método
Descrição
SetCollation()
The type of language collation to use when sorting results.
SetFilter()
The query filter specifying which document to delete.
SetHint()
The index to use to scan for documents.

O exemplo abaixo cria um DeleteManyModel para excluir documentos onde o rating é maior que 7:

models := []mongo.WriteModel{
mongo.NewDeleteManyModel().SetFilter(bson.D{{"rating", bson.D{{"$gt", 7}}}}),
}

O método BulkWrite() permite a você especificar se você deseja executar as operações em massa como ordenadas ou não ordenadas em seu BulkWriteOptions.

Por padrão, o método BulkWrite() executa operações em massa para que você as adicione e pare se ocorrer um erro.

Dica

Isto é equivalente a especificar true no método SetOrdered():

opts := options.BulkWrite().SetOrdered(true)

Para executar operações de gravação em massa em qualquer ordem e continuar se ocorrer um erro, especifique false no método SetOrdered() . O método relata os erros posteriormente.

O exemplo a seguir executa as seguintes ações em qualquer ordem:

  • Insere dois documentos.

  • Substitui um documento onde o tipo é "Earl Gris" por um novo documento.

  • Aumenta todos os documentos rating em 3 se a classificação atual for inferior a 7.

  • Exclui todos os documentos onde a classificação é 9.

models := []mongo.WriteModel{
mongo.NewInsertOneModel().SetDocument(bson.D{{"type", "Oolong"}, {"rating", 9}}),
mongo.NewInsertOneModel().SetDocument(bson.D{{"type", "Assam"}, {"rating", 6}}),
mongo.NewReplaceOneModel().SetFilter(bson.D{{"type", "Earl Grey"}}).
SetReplacement(bson.D{{"type", "Matcha"}, {"rating", 4}}),
mongo.NewUpdateManyModel().SetFilter(bson.D{{"rating", bson.D{{"$lt", 7}}}}).
SetUpdate(bson.D{{"$inc", bson.D{{"rating", 3}}}}),
mongo.NewDeleteManyModel().SetFilter(bson.D{{"rating", 9}}),
}
opts := options.BulkWrite().SetOrdered(false)
results, err := coll.BulkWrite(context.TODO(), models, opts)
if err != nil {
panic(err)
}
fmt.Printf("Number of documents inserted: %d\n", results.InsertedCount)
fmt.Printf("Number of documents replaced or updated: %d\n", results.ModifiedCount)
fmt.Printf("Number of documents deleted: %d\n", results.DeletedCount)

Os seguintes documentos estão presentes na collection ratings após a operação em massa:

[{_id ObjectID("...")} {type Masala} {rating 10}]
[{_id ObjectID("...")} {type Matcha} {rating 7}]

Para obter um exemplo executável sobre como executar uma operação em massa, consulte Executar operações em massa.

Para saber mais sobre como executar as operações mencionadas, 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:

←  Inserir ou atualizar em uma única operaçãoOperações compostas →
Dê Feedback
© 2022 MongoDB, Inc.

Sobre

© 2022 MongoDB, Inc.