Docs Menu
Docs Home
/ /

Modificar documentos

You can modify documents in a MongoDB collection by using update and replace operations. Update operations modify the fields and values of a document while keeping other fields and values unchanged. Replace operations substitute all fields and values in an existing document with specified fields and values while keeping the _id field value unchanged.

El driver de Node.js ofrece los siguientes métodos para modificar documentos:

  • updateOne()

  • updateMany()

  • replaceOne()

To learn how to replace documents, see the Guía dereemplazo de documentos.

Tip

Interactive Lab

Esta página incluye un breve laboratorio interactivo que demuestra cómo modificar datos usando el método updateMany(). Puede completar este laboratorio directamente en la ventana de su navegador sin instalar MongoDB o un editor de código.

Para iniciar el laboratorio, haga clic en el Open Interactive Tutorial Botón en la parte superior de la página. Para ampliar el laboratorio a pantalla completa, haga clic en el botón de pantalla completa () en la esquina superior derecha del panel del laboratorio.

Para realizar una actualización en uno o más documentos, crear un documento de actualización que especifique el operador de actualización (el tipo de actualización a realizar) y los campos y valores que describen el cambio. Actualizar los documentos utilizando el siguiente formato:

{
<update operator>: {
<field> : {
...
},
<field> : {
}
},
<update operator>: {
...
}
}

El nivel superior de un documento de actualización contiene uno o más de los siguientes operadores de actualización:

  • $set: reemplaza el valor de un campo con uno especificado

  • $inc: incrementa o disminuye los valores de los campos

  • $rename: cambia el nombre de los campos

  • $unset: remueve campos

  • $mul: multiplica el valor de un campo por un número especificado

See the MongoDB Server manual for a complete list of update operators and their usage.

Los operadores de actualización se aplican solo a los campos asociados con ellos en su documento de actualización.

Nota

Pipelines de agregación en operaciones de actualización

Si se está utilizando la versión 4.2 de MongoDB o posterior, se pueden usar pipelines de agregación compuestas por un subconjunto de etapas de agregación en las operaciones de actualización. Para aprender más sobre las etapas de agregación que MongoDB admite en las pipelines de agregación utilizadas en las operaciones de actualización, se puede consultar nuestro tutorial sobre cómo construir actualizaciones con pipelines de agregación.

Considere un documento en la colección myDB.items con campos que describen un artículo en venta, su precio y la cantidad disponible:

{
_id: 465,
item: "Hand-thrown ceramic plate",
price: 32.50,
quantity: 7,
}

Si se aplica el operador para actualizar $set con un nuevo valor para quantity, se puede utilizar el siguiente documento para actualizar:

const myDB = client.db("myDB");
const myColl = myDB.collection("items");
const filter = { _id: 465 };
// update the value of the 'quantity' field to 5
const updateDocument = {
$set: {
quantity: 5,
},
};
const result = await myColl.updateOne(filter, updateDocument);

El documento actualizado se asemeja al siguiente, con un valor actualizado en el campo quantity y todos los demás valores sin cambios:

{
_id: 465,
item: "Hand-thrown ceramic plate",
price: 32.50,
quantity: 5,
}

Si una operación para actualizar no logra coincidir con ningún documento en una colección, no se realiza ningún cambio. Las operaciones de actualización se pueden configurar para realizar una inserción que intenta llevar a cabo una actualización, pero si no coincide ningún documento, inserta un nuevo documento con los campos y valores especificados.

No se puede modificar el campo _id de un documento ni cambiar un campo a un valor que infrinja una restricción de índice único. Consultar el manual de MongoDB Server para obtener más información sobre índices únicos.

Nota

Configuración de ejemplo

Este ejemplo se conecta a una instancia de MongoDB con un URI de conexión. Para obtener más información sobre cómo realizar la conexión a la instancia de MongoDB, se debe consultar la guía Conexión a MongoDB. Este ejemplo también usa la colección movies en la base de datos sample_mflix incluida en los conjuntos de datos de muestra de Atlas. Se pueden cargar en la base de datos en el nivel gratuito de MongoDB Atlas siguiendo la guía de Introducción a MongoDB.

Este ejemplo utiliza el operador de actualización $set que especifica los valores de actualización para los campos de documentos. Para aprender más sobre los operadores de actualización, se puede consultar la documentación de referencia de los operadores de actualización de MongoDB.

El siguiente código es un archivo completo y autónomo que realiza una operación de actualizar:

1// Update a document
2
3import { MongoClient } from "mongodb";
4
5// Replace the uri string with your MongoDB deployment's connection string
6const uri = "<connection string uri>";
7
8const client = new MongoClient(uri);
9
10async function run() {
11 try {
12 const database = client.db("sample_mflix");
13 const movies = database.collection("movies");
14
15 // Create a filter for movies with the title "Random Harvest"
16 const filter = { title: "Random Harvest" };
17
18 /* Set the upsert option to insert a document if no documents match
19 the filter */
20 const options = { upsert: true };
21
22 // Specify the update to set a value for the plot field
23 const updateDoc = {
24 $set: {
25 plot: `A harvest of random numbers, such as: ${Math.random()}`
26 },
27 };
28
29 // Update the first document that matches the filter
30 const result = await movies.updateOne(filter, updateDoc, options);
31
32 // Print the number of matching and modified documents
33 console.log(
34 `${result.matchedCount} document(s) matched the filter, updated ${result.modifiedCount} document(s)`,
35 );
36 } finally {
37 // Close the connection after the operation completes
38 await client.close();
39 }
40}
41// Run the program and print any thrown errors
42run().catch(console.dir);
1// Update a document
2
3import { MongoClient } from "mongodb";
4
5// Replace the uri string with your MongoDB deployment's connection string
6const uri = "<connection string uri>";
7
8const client = new MongoClient(uri);
9
10// Define the Movie interface
11interface Movie {
12 plot: string;
13 title: string;
14}
15
16async function run() {
17 try {
18 const database = client.db("sample_mflix");
19 const movies = database.collection<Movie>("movies");
20
21 /* Update a document that has the title "Random Harvest" to have a
22 plot field with the specified value */
23 const result = await movies.updateOne(
24 { title: "Random Harvest" },
25 {
26 $set: {
27 plot: `A harvest of random numbers, such as: ${Math.random()}`,
28 },
29 },
30 /* Set the upsert option to insert a document if no documents
31 match the filter */
32 { upsert: true }
33 );
34
35 // Print the number of matching and modified documents
36 console.log(
37 `${result.matchedCount} document(s) matched the filter, updated ${result.modifiedCount} document(s)`
38 );
39 } finally {
40 // Close the connection after the operation completes
41 await client.close();
42 }
43}
44// Run the program and print any thrown errors
45run().catch(console.dir);

Al ejecutar el ejemplo anterior, se produce el siguiente resultado:

1 document(s) matched the filter, updated 1 document(s)

Nota

Configuración de ejemplo

Este ejemplo se conecta a una instancia de MongoDB con un URI de conexión. Para obtener más información sobre cómo realizar la conexión a la instancia de MongoDB, se debe consultar la guía Conexión a MongoDB. Este ejemplo también usa la colección movies en la base de datos sample_mflix incluida en los conjuntos de datos de muestra de Atlas. Se pueden cargar en la base de datos en el nivel gratuito de MongoDB Atlas siguiendo la guía de Introducción a MongoDB.

El siguiente código es un archivo completo y autónomo que realiza una operación de actualización múltiple:

1/* Update multiple documents */
2
3import { MongoClient } from "mongodb";
4
5// Replace the uri string with your MongoDB deployment's connection string
6const uri = "<connection string uri>";
7
8const client = new MongoClient(uri);
9
10async function run() {
11 try {
12 // Get the "movies" collection in the "sample_mflix" database
13 const database = client.db("sample_mflix");
14 const movies = database.collection("movies");
15
16 // Create a filter to update all movies with a 'G' rating
17 const filter = { rated: "G" };
18
19 // Create an update document specifying the change to make
20 const updateDoc = {
21 $set: {
22 random_review: `After viewing I am ${
23 100 * Math.random()
24 }% more satisfied with life.`,
25 },
26 };
27 // Update the documents that match the specified filter
28 const result = await movies.updateMany(filter, updateDoc);
29 console.log(`Updated ${result.modifiedCount} documents`);
30 } finally {
31 // Close the database connection on completion or error
32 await client.close();
33 }
34}
35run().catch(console.dir);
1/* Update multiple documents */
2
3import { MongoClient } from "mongodb";
4
5// Replace the uri string with your MongoDB deployment's connection string.
6const uri = "<connection string uri>";
7
8const client = new MongoClient(uri);
9
10enum Rating {
11 G = "G",
12 PG = "PG",
13 PG_13 = "PG-13",
14 R = "R",
15 NR = "NOT RATED",
16}
17
18// Create a Movie interface
19interface Movie {
20 rated: Rating;
21 random_review?: string;
22}
23
24async function run() {
25 try {
26 // Get the "movies" collection in the "sample_mflix" database
27 const database = client.db("sample_mflix");
28 const movies = database.collection<Movie>("movies");
29
30 // Update all documents that match the specified filter
31 const result = await movies.updateMany(
32 { rated: Rating.G },
33 {
34 $set: {
35 random_review: `After viewing I am ${
36 100 * Math.random()
37 }% more satisfied with life.`,
38 },
39 }
40 );
41 console.log(`Updated ${result.modifiedCount} documents`);
42 } finally {
43 // Close the database connection on completion or error
44 await client.close();
45 }
46}
47run().catch(console.dir);

Al ejecutar el ejemplo anterior, se verá un resultado como el siguiente:

Updated 477 documents

Para aprender más sobre cualquiera de los tipos o métodos discutidos en esta guía, consulta la siguiente documentación de la API:

Volver

Update Documents

En esta página