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

Update Documents

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

Las operaciones de actualización modifican los campos que se especifican, dejando los demás campos y valores sin cambios.

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

Cambiar 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 query para hacer coincidir 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 driver proporciona los siguientes métodos para actualizar documentos:

  • UpdateByID()Actualiza un único documento según su _id.

  • UpdateOne()Actualiza un único 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>", ... }, ... }

Consulta el manual del servidor de MongoDB para obtener 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 la operación es exitosa. El UpdateResult tipo 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 que se pasa a UpdateOne(), el método selecciona y actualiza el primer documento que coincida. Si ningún documento coincide con el filtro de query, la operación de actualización no realiza ningún cambio.

Ver 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 usa el método UpdateOne() para:

  • Busca en el documento donde el valor de _id es "10006546".

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

  • Incrementar 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 utilizando un URI de conexión. Para aprender más sobre cómo conectarte a tu instancia de MongoDB, consulta Crear un MongoClient. Este ejemplo también utiliza la colección restaurants en la base de datos sample_restaurants incluida en los conjuntos de datos de muestra de Atlas. Puede cargarlos en su base de datos en el nivel gratuito de MongoDB Atlas siguiendo los pasos en 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 utilizando un URI de conexión. Para aprender más sobre cómo conectarte a tu instancia de MongoDB, consulta Crear un MongoClient. Este ejemplo también utiliza la colección restaurants en la base de datos sample_restaurants incluida en los conjuntos de datos de muestra de Atlas. Puede cargarlos en su base de datos en el nivel gratuito de MongoDB Atlas siguiendo los pasos en 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 aprender más 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