Overview
En esta guía, puedes aprender cómo utilizar el controlador Go para realizar una operación de reemplazo en un documento dentro de una colección de MongoDB. Una operación de reemplazo se realiza de manera diferente a una operación de actualización. Una operación de actualización modifica únicamente los campos especificados en un documento de destino. Una operación de reemplazo remueve todos los campos en el documento de destino y los reemplaza por otros nuevos.
Parámetros
ReplaceOne() Espera un documento de reemplazo, que es el documento que se desea que sustituya a un documento existente. Los documentos de reemplazo utilizan el siguiente formato:
bson.D{{"<field>", "<value>"}, {"<field>", "<value>"}, ... }
Return Values
ReplaceOne() devuelve un tipo UpdateResult que contiene información sobre la operación de reemplazo si la operación es exitosa. El tipo UpdateResult contiene las siguientes propiedades:
Propiedad | Descripción |
|---|---|
| El número de documentos coincidentes con el filtro |
| El número de documentos modificados por la operación |
| El número de documentos actualizados por la operación |
| El |
Si varios documentos coinciden con el filtro de query pasado a ReplaceOne(), el método selecciona y reemplaza el primer documento coincidente. Tu operación de reemplazo falla si ningún documento coincide con el filtro de query.
Ejemplo
El siguiente documento describe un elemento de cocina:
{ "_id" : 2056, "item" : "Mug", "brand" : "Simply Ceramics", "price" : 2.99, "material" : "Glass" }
El siguiente ejemplo utiliza el método ReplaceOne() para sustituir este documento por uno que contiene un campo item con un valor de "Copa" y un campo quantity con un 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
El documento reemplazado contiene el contenido del documento de reemplazo y el campo inmutable _id de la siguiente manera:
{ "_id" : 2056, "item" : "Cup", "quantity" : 107 }
Ejemplo de reemplazo de un documento: archivo completo
Nota
Configuración de ejemplo
Este ejemplo se conecta a una instancia de MongoDB utilizando un URI de conexión. Para obtener más información sobre cómo conectar con su instancia de MongoDB, consulte Crear un MongoClient. Este ejemplo también usa la colección restaurants en la base de datos sample_restaurants incluida en la Conjuntos de datos de ejemplo de Atlas. Puedes cargarlos en tu base de datos en la versión gratuita de MongoDB Atlas siguiendo los pasos que se indican en la guía "Primeros pasos con Atlas".
Este ejemplo realiza las siguientes acciones en la colección restaurants:
Coincide con un documento en el que el valor de
namees"Rizzo's Fine Pizza"Reemplaza el documento coincidente por uno nuevo
// 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 any `bson:"address,omitempty"` Borough string `bson:"borough,omitempty"` Grades []any `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/es/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
Después de ejecutar el ejemplo completo, podrá encontrar el siguiente documento reemplazado en la colección restaurants:
{ "_id" : ObjectId("..."), "name" : "Rizzo's Pizza", "cuisine" : "Pizza/American" }
Documentación de la API
Para obtener más información sobre cualquiera de los métodos o tipos discutidos en esta guía, consultar la siguiente documentación de la API: