Menu Docs

Página inicial do DocsGo

Inserir ou atualizar em uma única operação

Nesta página

  • Visão geral
  • Upsert
  • Informações adicionais

Neste guia, você verá como especificar umupsert .

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", "Assam"}, {"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 .

Os aplicativos utilizam operações de inserção e atualização para armazenar e modificar dados. Às vezes, você precisa escolher entre uma operação de inserção e uma operação de atualização, dependendo da existência do documento. O MongoDB simplifica essa decisão para nós com uma opção upsert .

A opção upsert realiza uma das seguintes ações:

  • Atualize documentos que correspondam ao seu filtro de query

  • Insira um documento se não houver correspondência com seu filtro de query

Você pode especificar um upsert passando true para o método SetUpsert() nas opções dos seguintes métodos de operação de escrita:

  • UpdateOne()

  • UpdateByID()

  • UpdateMany()

  • ReplaceOne()

  • FindOneAndUpdate()

  • FindOneAndReplace()

Dica

Se você não especificar um upsert, nenhuma alteração ocorrerá na operação de gravação quando nenhum documento corresponder ao seu filtro de consulta. Isto é equivalente a passar false para o método SetUpsert().

O exemplo a seguir executa as seguintes ações:

  • Corresponde a documentos onde o type é "Oolong"

  • Atualiza a rating do documento correspondente para 8

  • Insere este documento se não houver correspondência com o filtro de query

filter := bson.D{{"type", "Oolong"}}
update := bson.D{{"$set", bson.D{{"rating", 8}}}}
opts := options.Update().SetUpsert(true)
result, err := coll.UpdateOne(context.TODO(), filter, update, opts)
if err != nil {
panic(err)
}
fmt.Printf("Number of documents updated: %v\n", result.ModifiedCount)
fmt.Printf("Number of documents upserted: %v\n", result.UpsertedCount)

Para saber mais sobre as operações mencionadas, consulte os seguintes guias:

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

←  Atualizar Matrizes em um DocumentoOperações em massa →
Dê Feedback
© 2022 MongoDB, Inc.

Sobre

© 2022 MongoDB, Inc.