Inserir ou atualizar em uma única operação
Nesta página
Visão geral
Neste guia, você verá como especificar umupsert .
Dados de amostra
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
.
Upsert
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()
.
Exemplo
O exemplo a seguir executa as seguintes ações:
Corresponde a documentos onde o
type
é "Oolong"Atualiza a
rating
do documento correspondente para8
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)
Informações adicionais
Para saber mais sobre as operações mencionadas, consulte os seguintes guias:
Documentação da API
Para saber mais sobre qualquer um dos métodos ou tipos mencionados neste guia, consulte a seguinte documentação da API: