Docs Menu
Docs Home
/ /

Reemplazar Documentos

En esta guía, aprenderá a usar el controlador de Node.js para realizar una operación de reemplazo en 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.

Para realizar una operación de reemplazo, crea un documento de reemplazo que consista en los campos y valores que deseas utilizar en tu operación de reemplazo. Los documentos de reemplazo utilizan el siguiente formato:

{
<field>: {
<value>
},
<field>: {
...
}
}

Los documentos de reemplazo son los documentos que desea que reemplacen a los documentos existentes que coinciden con los filtros de consulta.

Puede especificar más opciones, como upsert, utilizando el parámetro opcional options. Si se establece el campo de opción upsert en true, el método inserta un nuevo documento si ningún documento coincide con la consulta.

El método replaceOne() genera una excepción si se produce un error durante la ejecución. Por ejemplo, si se especifica un valor que infringe una regla de índice único, replaceOne() genera una excepción duplicate key error.

Nota

Si su aplicación requiere el documento después de la actualización, utilice el El métodocollection.findOneAndReplace() tiene una interfaz similar a la replaceOne() de. Puede configurar findOneAndReplace() para que devuelva el documento original coincidente o el documento de reemplazo.

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: 501,
item: "3-wick beeswax candle",
price: 18.99,
quantity: 10,
}

Supongamos que desea reemplazar este documento por uno que contenga la descripción de un elemento completamente diferente. Su operación de reemplazo podría ser similar a la siguiente:

const myDB = client.db("myDB");
const myColl = myDB.collection("items");
const filter = { _id: 501 };
// replace the matched document with the replacement document
const replacementDocument = {
item: "Vintage silver flatware set",
price: 79.15,
quantity: 1,
};
const result = await myColl.replaceOne(filter, replacementDocument);

El documento reemplazado contiene el contenido del documento de reemplazo y el campo inmutable _id de la siguiente manera:

{
_id: 501,
item: "Vintage silver flatware set",
price: 79.15,
quantity: 1,
}

Si una operación de reemplazo no coincide con ningún documento de una colección, no realiza ningún cambio. Las operaciones de reemplazo se pueden configurar para realizar una upsert que intenta realizar el reemplazo, pero si no hay documentos coincidentes, 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.

El siguiente código es un archivo completo e independiente que realiza una operación de reemplazo:

1import { MongoClient } from "mongodb";
2
3// Replace the uri string with your MongoDB deployment's connection string.
4const uri = "<connection string uri>";
5
6const client = new MongoClient(uri);
7
8async function run() {
9 try {
10
11 // Get the database and collection on which to run the operation
12 const database = client.db("sample_mflix");
13 const movies = database.collection("movies");
14
15 // Create a query for documents where the title contains "The Cat from"
16 const query = { title: { $regex: "The Cat from" } };
17
18 // Create the document that will replace the existing document
19 const replacement = {
20 title: `The Cat from Sector ${Math.floor(Math.random() * 1000) + 1}`,
21 };
22
23 // Execute the replace operation
24 const result = await movies.replaceOne(query, replacement);
25
26 // Print the result
27 console.log(`Modified ${result.modifiedCount} document(s)`);
28 } finally {
29 await client.close();
30 }
31}
32run().catch(console.dir);
1import { MongoClient } from "mongodb";
2
3// Replace the uri string with your MongoDB deployment's connection string.
4const uri = "<connection string uri>";
5
6const client = new MongoClient(uri);
7
8interface Movie {
9 title: string;
10}
11
12async function run() {
13 try {
14 const database = client.db("sample_mflix");
15 const movies = database.collection<Movie>("movies");
16
17 const result = await movies.replaceOne(
18 { title: { $regex: "The Cat from" } },
19 {
20 title: `The Cat from Sector ${Math.floor(Math.random() * 1000) + 1}`,
21 }
22 );
23 console.log(`Modified ${result.modifiedCount} document(s)`);
24 } finally {
25 await client.close();
26 }
27}
28run().catch(console.dir);

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

Modified 1 document(s)

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

Modificar documentos

En esta página