Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

Update Documents

Si la aplicación usada almacena y modifica datos en MongoDB, probablemente se pueden utilizar las operaciones de inserción y actualización. En ciertos flujos de trabajo, la ejecución de una operación de inserción o actualización depende de si el documento existe. En estos casos, se puede simplificar la lógica de la aplicación utilizando la opción upsert disponible en los siguientes métodos:

Si el filtro de query pasado a estos métodos no encuentra ninguna coincidencia y se establece la opción upsert en true, MongoDB inserta el documento de actualización. Vamos a revisar un ejemplo.

Supongamos que la aplicación rastrea la ubicación actual de los camiones de comida, almacenando los datos de la dirección más cercana en la colección myDB.foodTrucks, que se asemeja a lo siguiente:

[
{ name: "Haute Skillet", address: "42 Avenue B" },
{ name: "Lady of the Latke", address: "35 Fulton Rd" },
...
]

Como usuario de la aplicación, se lee sobre el cambio de ubicación habitual de un camión de comida y se desea aplicar la actualización. Esta actualización podría asemejarse a lo siguiente:

const query = { name: 'Deli Llama' };
const update = { $set: { name: 'Deli Llama', address: '3 Nassau St' } };
const options = {};
await myColl.updateOne(query, update, options);

Si existe un camión de comida llamado "Deli Llama", llamar al método anterior actualizará el documento en la colección. Sin embargo, si no hay camiones de comida llamados "Deli Llama" en la colección, no se realizan cambios.

Se debe considerar el caso en el que se desea añadir información sobre el camión de comida aunque aún no exista en la colección. En lugar de consultar primero si existe para determinar si insertar o actualizar el documento, podemos establecer upsert a true en nuestra llamada a updateOne() de la siguiente manera:

const query = { name: 'Deli Llama' };
const update = { $set: { name: 'Deli Llama', address: '3 Nassau St' } };
const options = { upsert: true };
await myColl.updateOne(query, update, options);

Después de ejecutar la operación anterior, su colección tendrá un aspecto similar al siguiente, incluso si el documento "Deli Llama" no existía en la colección antes de la operación:

[
{ name: "Haute Skillet", address: "42 Avenue B" },
{ name: "Lady of the Latke", address: "35 Fulton Rd" },
{ name: "Deli Llama", address: "3 Nassau St" },
...
]