Visão geral
Neste guia, você pode aprender como usar o driver Go para executar uma operação de substituição em um documento em uma coleção MongoDB . Uma operação de substituição tem desempenho diferente de uma operação de atualização. Uma operação de atualização modifica somente os campos especificados em um documento de destino. Uma operação de substituição remove todos os campos do documento de destino e os substitui por novos.
Parâmetros
ReplaceOne()
espera um documento de substituição, que é o documento que você deseja substituir um documento existente. Os documentos de substituição usam o seguinte formato:
bson.D{{"<field>", "<value>"}, {"<field>", "<value>"}, ... }
Return Values
ReplaceOne()
retorna um tipo de UpdateResult
que contém informações sobre a operação de substituição se a operação for bem-sucedida. O tipo UpdateResult
contém as seguintes propriedades:
Propriedade | Descrição |
---|---|
| O número de documentos correspondidos pelo filtro |
| O número de documentos modificados pela operação |
| O número de documentos atualizados pela operação |
| O |
Se vários documentos corresponderem ao filtro de query passado para ReplaceOne()
, o método selecionará e substituirá o primeiro documento correspondente. Se nenhum documento corresponder ao filtro de query, a operação de substituição falhará.
Exemplo
O documento a seguir descreve um item de cozinha:
{ "_id" : 2056, "item" : "Mug", "brand" : "Simply Ceramics", "price" : 2.99, "material" : "Glass" }
O exemplo a seguir usa o método ReplaceOne()
para substituir este documento por um que contenha um campo item
com o valor de "Cup" e um campo quantity
com um valor de 107:
filter := bson.D{{"_id", 2056}} replacement := bson.D{{"item", "Cup"}, {"quantity", 107}} result, err := collection.ReplaceOne(context.TODO(), filter, replacement) fmt.Printf("Documents matched: %v\n", result.MatchedCount) fmt.Printf("Documents replaced: %v\n", result.ModifiedCount)
Documents matched: 1 Documents replaced: 1
O documento substituído contém o conteúdo do documento de substituição e o campo imutável _id
da seguinte forma:
{ "_id" : 2056, "item" : "Cup", "quantity" : 107 }
Exemplo de substituição de um documento: arquivo completo
Observação
Exemplo de configuração
Esse exemplo se conecta a uma instância do MongoDB usando um URI de conexão. Para saber mais sobre como se conectar à sua instância do MongoDB, consulte o guia Criar um MongoClient. Este exemplo também utiliza a coleção do restaurants
no banco de dados do sample_restaurants
incluído nosconjuntos de dados de amostra do Atlas do . Você pode carregá-los em seu banco de dados na camada grátis do MongoDB Atlas seguindo o Guia de Introdução ao Atlas.
Este exemplo executa as seguintes ações na coleção restaurants
:
Corresponde a um documento no qual o valor de
name
é"Rizzo's Fine Pizza"
Substitui o documento correspondente por um novo documento
// Replaces the first document that matches a filter by using the Go driver package main import ( "context" "fmt" "log" "os" "github.com/joho/godotenv" "go.mongodb.org/mongo-driver/v2/bson" "go.mongodb.org/mongo-driver/v2/mongo" "go.mongodb.org/mongo-driver/v2/mongo/options" ) type Restaurant struct { Name string RestaurantId string `bson:"restaurant_id,omitempty"` Cuisine string `bson:"cuisine,omitempty"` Address interface{} `bson:"address,omitempty"` Borough string `bson:"borough,omitempty"` Grades []interface{} `bson:"grades,omitempty"` } func main() { if err := godotenv.Load(); err != nil { log.Println("No .env file found") } var uri string if uri = os.Getenv("MONGODB_URI"); uri == "" { log.Fatal("You must set your 'MONGODB_URI' environment variable. See\n\t https://www.mongodb.com/pt-br/docs/drivers/go/current/connect/mongoclient/#environment-variable") } client, err := mongo.Connect(options.Client().ApplyURI(uri)) if err != nil { panic(err) } defer func() { if err = client.Disconnect(context.TODO()); err != nil { panic(err) } }() coll := client.Database("sample_restaurants").Collection("restaurants") filter := bson.D{{"name", "Rizzo's Fine Pizza"}} // Creates a new document containing "Name" and "Cuisine" fields replacement := Restaurant{Name: "Rizzo's Pizza", Cuisine: "Pizza/American"} // Replaces the first document that matches the filter with a new document result, err := coll.ReplaceOne(context.TODO(), filter, replacement) if err != nil { panic(err) } // Prints the number of modified documents if result.MatchedCount != 0 { fmt.Println("Number of documents replaced:", result.ModifiedCount) } // When you run this file for the first time, it should print: // Number of documents replaced: 1 }
Number of documents replaced: 1
Resultado esperado
Após executar o exemplo completo, você pode encontrar o seguinte documento substituído na coleção restaurants
:
{ "_id" : ObjectId("..."), "name" : "Rizzo's Pizza", "cuisine" : "Pizza/American" }
Documentação da API
Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: