Docs Menu
Docs Home
/ /
Campos

$set (operador de actualización)

Nota

Desambiguación

La siguiente página hace referencia al operador de actualización $setPara la etapa de agregación, véase $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 añadirá un nuevo campo con el valor especificado, siempre que el nuevo campo no infrinja una restricción de tipo. Si especificas una ruta punteada para un campo inexistente, $set creará los documentos incrustados según sea necesario completar dicha ruta hasta el campo.

Si se especifican varios pares de 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").

Crear la colección products:

db.products.insertOne(
{
_id: 100,
quantity: 250,
instock: true,
reorder: false,
details: { model: "14QQ", make: "Clothes Corp" },
tags: [ "apparel", "clothing" ],
ratings: [ { by: "Customer007", rating: 4 } ]
}
)

Para el documento que cumple con el criterio _id igual a 100, la siguiente operación utiliza el operador $set para actualizar el valor del campo quantity, del campo details y del campo tags.

db.products.updateOne(
{ _id: 100 },
{ $set:
{
quantity: 500,
details: { model: "2600", make: "Fashionaires" },
tags: [ "coats", "outerwear", "clothing" ]
}
}
)

La operación actualiza los siguientes elementos:

  • valor de quantity a 500

  • details campo con un nuevo documento incrustado

  • tags Campo con un nuevo arreglo

{
_id: 100,
quantity: 500,
instock: true,
reorder: false,
details: { model: '2600', make: 'Fashionaires' },
tags: [ 'coats', 'outerwear', 'clothing' ],
ratings: [ { by: 'Customer007', rating: 4 } ]
}

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

Para el documento que cumple con los criterios _id igual a 100, la siguiente operación actualiza el campo make en el documento details:

db.products.updateOne(
{ _id: 100 },
{ $set: { "details.make": "Kustom Kidz" } }
)

Después de actualizar, el documento tiene los siguientes valores:

{
_id: 100,
quantity: 500,
instock: true,
reorder: false,
details: { model: '2600', make: 'Kustom Kidz' },
tags: [ 'coats', 'outerwear', 'clothing' ],
ratings: [ { by: 'Customer007', rating: 4 } ]
}

Importante

El código anterior utiliza dot notation para actualizar el campo make del documento incrustado details. El formato del código es similar al siguiente ejemplo de código, en el que se reemplaza todo el documento incrustado, removiendo todos los demás campos del documento details incrustado:

db.products.updateOne(
{ _id: 100 },
{ $set: { details:
{make: "Kustom Kidz"}
}
})

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

Para el documento que cumple con los criterios _id igual a 100, la siguiente operación actualiza el valor del segundo elemento (índice del arreglo 1) en el campo tags y el campo rating en el primer elemento (índice del arreglo 0) del arreglo ratings.

db.products.updateOne(
{ _id: 100 },
{ $set:
{
"tags.1": "rain gear",
"ratings.0.rating": 2
}
}
)

Después de actualizar, el documento tiene los siguientes valores:

{
_id: 100,
quantity: 500,
instock: true,
reorder: false,
details: { model: '2600', make: 'Kustom Kidz' },
tags: [ 'coats', 'rain gear', 'clothing' ],
ratings: [ { by: 'Customer007', rating: 2 } ]
}

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

Tip

Volver

$rename

En esta página