Docs Menu
Docs Home
/ /

$set (operador de actualización)

Nota

Desambiguación

La siguiente página se refiere al operador de actualizar $set. Para la etapa de agregación, consulte $set.

$set

El operador $set reemplaza el valor de un campo con el valor especificado.

Puedes usar $set para implementaciones alojadas en los siguientes entornos:

  • MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube

  • MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB

  • MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.

La expresión del operador $set tiene la siguiente forma:

{ $set: { <field1>: <value1>, ... } }

Para especificar un <field> en un documento incrustado o en un arreglo, utiliza notación de puntos.

A partir de MongoDB 5.0, los operadores de actualización procesan los campos de documentos con nombres basados en cadenas en orden lexicográfico. Los campos con nombres numéricos se procesan en orden numérico. Consulta Comportamiento del operador de actualización para obtener más información.

Si el campo no existe, $set agrega un campo nuevo con el valor especificado si el nuevo campo cumple con una restricción de tipo. Si se especifica una ruta con puntos para un campo inexistente, $set crea los documentos incrustados según sea necesario para cumplir con la ruta punteada hacia el campo.

Si especificas varios pares campo-valor, $set actualizará o creará cada campo.

A partir de MongoDB 5.0, mongod ya no genera un error cuando utiliza un operador de actualización como $set con una expresión de operando vacía ( { } ). Una actualización vacía no produce cambios y no genera ninguna entrada en el oplog (lo que significa que la operación es una “no-op").

El operador $set proporciona las siguientes ventajas en comparación con la sustitución del documento completo:

  • Actualizaciones Dirigidas: $set modifica solo los campos especificados, asegurando actualizaciones eficientes al evitar guardados innecesarios y gastos en general cuando trabajas con documentos grandes.

  • Entradas de Oplog eficientes: $set optimiza la replicación escribiendo solo los campos actualizados en el oplog en lugar de todo el documento. Este proceso reduce el tamaño de las entradas de oplog y permite que los nodos repliquen los cambios de manera más eficiente.

  • Lógica simplificada: Las aplicaciones que utilizan $set no necesitan calcular los campos modificados antes de enviar una actualización. MongoDB reduce la complejidad al gestionar el cálculo de deltas internamente.

Los ejemplos de esta página utilizan datos del conjunto de datos de muestra sample_mflix. Para obtener más información sobre cómo cargar este conjunto de datos en la implementación autogestionada de MongoDB, consultar Cargar el conjunto de datos de muestra. Si se realizó alguna modificación en las bases de datos de muestra, es posible que se deban descartar y volver a crear las bases de datos para ejecutar los ejemplos de esta página.

El siguiente ejemplo utiliza el operador $set para añadir los campos label y status al documento de película coincidente:

db.movies.updateOne(
{ title: "The Dark Knight" },
{
$set: {
label: "Award Winner",
status: "classic"
}
}
)

La operación devuelve el siguiente resultado:

{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}

El siguiente ejemplo utiliza la notación de puntos para actualizar el campo highlight del documento incrustado imdb en la película coincidente:

db.movies.updateOne(
{ title: "The Dark Knight" },
{ $set: { "imdb.highlight": "Critics' Choice" } }
)

La operación devuelve el siguiente resultado:

{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}

Importante

El ejemplo anterior utiliza la notación de puntos para actualizar el campo highlight del documento incrustado imdb. El siguiente formato en su lugar reemplaza el documento incrustado completo, removiendo todos los demás campos de imdb:

db.movies.updateOne(
{ title: "The Dark Knight" },
{ $set: { imdb: { highlight: "Critics' Choice" } } }
)

El siguiente ejemplo usa el operador $set para actualizar el primer elemento (índice de arreglo 0) del arreglo genres en el documento de película correspondiente:

db.movies.updateOne(
{ title: "The Dark Knight" },
{ $set: { "genres.0": "Thriller" } }
)

La operación devuelve el siguiente resultado:

{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}

Para obtener operadores de actualización adicionales para arreglos, consulta Operadores de actualización de arreglos.

Tip

Volver

$rename

En esta página