Docs Menu
Docs Home
/ /

Update Documents

En esta guía, puede aprender cómo actualizar documentos en MongoDB mediante operaciones de actualización.

Las operaciones de actualización cambian los campos que usted especifica, mientras que otros campos y valores permanecen sin cambios.

En MongoDB, todos los métodos para modificar documentos siguen el mismo patrón:

Cambiar la firma del método

Nota

Marcador de posición

changeX es un marcador de posición y no un método real.

El patrón espera que usted:

  • Especifique un filtro de consulta para que coincida con uno o más documentos para modificar.

  • Especifique los cambios de campo y valor.

  • Especifique opciones, si debe modificar el comportamiento del método.

El controlador proporciona los siguientes métodos para actualizar documentos:

  • UpdateByID():Actualiza un solo documento en función de su _id.

  • UpdateOne():Actualiza un solo documento.

  • UpdateMany():Actualiza varios documentos.

Cada documento de una colección de MongoDB tiene un campo _id único e inmutable. No se pueden usar operaciones de actualización para modificar el campo _id. Si se intenta modificar este campo, los métodos de actualización devuelven un WriteError.

Cada método utiliza un documento de actualización que incluye al menos un operador de actualización. El operador de actualización especifica el tipo de actualización que se realizará. El documento de actualización también incluye los campos y valores que describen el cambio. Los documentos de actualización utilizan el siguiente formato:

bson.D{{"<update operator>", bson.D{{"<field>", <value>},
{"<field>", <value>}, ... }},
{"<update operator>", ... }, ... }

Consulte el manual del servidor MongoDB para obtener más información. Lista completa de operadores de actualización y descripciones.

Tip

UpdateOne() actualiza el primer documento que coincida con el filtro de query que proporciones. Para asegurarse de actualizar el documento correcto, se puede utilizar la opción sort para especificar el orden en que la operación encuentra los documentos. Para obtener más información, vea la documentación de UpdateOneOptions.

Nota

Pipelines de agregación en operaciones de actualización

Puedes usar pipelines de agregación compuestos por un subconjunto de etapas de agregación en operaciones de actualización. Para aprender más sobre las etapas de agregación que MongoDB soporta en pipelines de agregación, consulta el tutorial sobre cómo realizar Actualizaciones con Pipeline de Agregación tutorial en el Manual del Servidor.

UpdateOne(), UpdateByID() y UpdateMany() devuelven un tipo UpdateResult que contiene información sobre la operación de actualización 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 UpdateOne(), el método selecciona y actualiza el primer documento coincidente. Si ningún documento coincide con el filtro de consulta, la operación de actualización no realiza cambios.

Vea el Guía de upsert para aprender cómo insertar un nuevo documento si ningún documento coincide con el filtro de consulta.

El siguiente ejemplo utiliza la listingsAndReviews colección del conjunto de datos de los sample_airbnb conjuntos de datos de muestra de Atlas. El siguiente documento describe un anuncio de Airbnb:

{
"_id": "10006546",
"listing_url": "https://www.airbnb.com/rooms/10006546",
"name": "Ribeira Charming Duplex",
"summary": "Fantastic duplex apartment with three bedrooms, located in the historic area of Porto, Ribeira (Cube)...",
...
"minimum_nights": "2",
"maximum_nights": "30",
...
"accommodates": 8,
...
}

El siguiente ejemplo utiliza el método UpdateOne() para:

  • Coincide con el documento donde el valor _id es "10006546".

  • Establezca el campo name en "Ribiera River View Duplex".

  • Incrementa el valor del campo accommodates en 1.

filter := bson.D{{"_id", "10006546"}}
update := bson.D{{"$set", bson.D{{"name", "Ribiera River View Duplex"}}},
{"$inc", bson.D{{"accomodates", 1}}}}
result, err := collection.UpdateOne(context.TODO(), filter, update)
fmt.Printf("Documents matched: %v\n", result.MatchedCount)
fmt.Printf("Documents updated: %v\n", result.ModifiedCount)
Documents matched: 1
Documents updated: 1

A continuación se muestra el documento actualizado resultante de la operación de actualización anterior:

{
"_id": "10006546",
"listing_url": "https://www.airbnb.com/rooms/10006546",
"name": "Ribeira River View Duplex",
"summary": "Fantastic duplex apartment with three bedrooms, located in the historic area of Porto, Ribeira (Cube)...",
...
"minimum_nights": "2",
"maximum_nights": "30",
...
"accommodates": 9,
...
}

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 la guía "Crear un MongoClient". Este ejemplo también utiliza la restaurants colección de la sample_restaurants base de datos incluida en los conjuntos de datos de ejemplo 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.

El siguiente ejemplo es un archivo completamente ejecutable que realiza las siguientes acciones en la colección restaurants:

  • Encuentra un documento con un valor específico _id

  • Actualiza el valor del campo avg_rating del documento coincidente

// Updates the first document that matches a query 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"
)
// Defines a Restaurant struct as a model for documents in the "restaurants" collection
type Restaurant struct {
ID bson.ObjectID `bson:"_id"`
Name string `bson:"name"`
AverageRating float64 `bson:"avg_rating,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")
id, _ := bson.ObjectIDFromHex("5eb3d668b31de5d588f4292b")
filter := bson.D{{"_id", id}}
// Creates instructions to add the "avg_rating" field to documents
update := bson.D{{"$set", bson.D{{"avg_rating", 4.4}}}}
// Updates the first document that has the specified "_id" value
result, err := coll.UpdateOne(context.TODO(), filter, update)
if err != nil {
panic(err)
}
// Prints the number of updated documents
fmt.Printf("Documents updated: %v\n", result.ModifiedCount)
// When you run this file for the first time, it should print output similar to the following:
// Documents updated: 1
}
Documents updated: 1

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 la guía "Crear un MongoClient". Este ejemplo también utiliza la restaurants colección de la sample_restaurants base de datos incluida en los conjuntos de datos de ejemplo 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.

El siguiente ejemplo es un archivo completamente ejecutable que realiza las siguientes acciones en la colección restaurants:

  • Busca documentos con el valor de campo cuisine de "Pizza" y el valor de campo borough de "Brooklyn"

  • Actualiza el valor del campo avg_rating de los documentos coincidentes

// Updates documents that match a query 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"
)
// Defines a Restaurant struct as a model for documents in the "restaurants" collection
type Restaurant struct {
ID bson.ObjectID `bson:"_id"`
Name string `bson:"name"`
Cuisine string `bson:"cuisine"`
AverageRating float64 `bson:"avg_rating,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{{"cuisine", "Pizza"}, {"borough", "Brooklyn"}}
// Creates instructions to update the values of the "avg_rating" field
update := bson.D{{"$set", bson.D{{"avg_rating", 4.5}}}}
// Updates documents in which the value of the "Cuisine"
// field is "Pizza"
result, err := coll.UpdateMany(context.TODO(), filter, update)
if err != nil {
panic(err)
}
// Prints the number of updated documents
fmt.Printf("Documents updated: %v\n", result.ModifiedCount)
// end updatemany
// When you run this file for the first time, it should print output similar to the following:
// Documents updated: 296
}
Documents updated: 296

Para obtener más información sobre las operaciones mencionadas, consulte las siguientes guías:

Para obtener más información sobre cómo actualizar elementos de arreglos, consulta Actualizar matrices en un documento.

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

Texto de query

En esta página