Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

$set (operador de actualización)

Nota

Desambiguación

La página siguiente hace referencia al operador de actualización. Para la etapa de $set agregación,$set consulte.

$set

El operador reemplaza el valor de un campo con el valor $set 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 $set expresión del operador 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 nuevo campo con el valor especificado, siempre que el nuevo campo no infrinja ninguna restricción de tipo. Si se especifica una ruta de acceso discontinua para un campo inexistente, crea$set los documentos incrustados necesarios para completar dicha ruta.

Si especifica varios pares campo-valor, actualiza o crea cada$set campo.

A partir de MongoDB 5.0, mongodya no genera un error cuando se utiliza un operador de actualización como$setcon una expresión de operando vacía ( { } ). Una actualización vacía no produce cambios y no se crea ninguna entrada en el oplog (lo que significa que la operación no tiene efecto).

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 $set operador para agregar los campos label y status al documento de película correspondiente:

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 utiliza el operador para actualizar el primer elemento (índice $set de 0 matriz) de la genres matriz 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.