Docs Menu
Docs Home
/ /

Reemplazar Documentos

En esta guía, aprenderá a usar el controlador Go para reemplazar un documento de una colección de MongoDB. Una operación de reemplazo funciona de forma diferente a una operación de actualización. Una operación de actualización modifica solo los campos especificados en un documento de destino. Una operación de reemplazo elimina todos los campos del documento de destino y los reemplaza por otros nuevos.

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

ReplaceOne() Devuelve un tipo UpdateResult que contiene información sobre la operación de reemplazo si esta se realiza correctamente. El tipo UpdateResult contiene las siguientes propiedades:

Propiedad
Descripción

MatchedCount

El número de documentos coincidentes con el filtro

ModifiedCount

El número de documentos modificados por la operación

UpsertedCount

El número de documentos insertados por la operación

UpsertedID

El _id del documento insertado, o nil si no hay ninguno

Si varios documentos coinciden con el filtro de consulta pasado a ReplaceOne(), el método selecciona y reemplaza el primer documento coincidente. La operación de reemplazo falla si ningún documento coincide con el filtro de consulta.

El siguiente documento describe un artículo 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 "Cup" 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
}

Nota

Configuración de ejemplo

Este ejemplo se conecta a una instancia de MongoDB mediante una URI de conexión. Para obtener más información sobre cómo conectarse a su instancia de MongoDB, consulte Cree una guía de MongoClient. Este ejemplo también utiliza la restaurants colección en la sample_restaurants base de datos incluida en el Conjuntos de datos de muestra de Atlas. Puede cargarlos en su base de datos en la versión gratuita de MongoDB Atlas siguiendo la Guía de introducción a Atlas.

Este ejemplo realiza las siguientes acciones en la colección restaurants:

  • Coincide con un documento en el que el valor de name es "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

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"
}

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:

Volver

Update Documents

En esta página