Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Reemplazar Documentos

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.

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 la operación es exitosa. 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 actualizados por la operación

UpsertedID

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

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.

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
}

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