Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Etapas de la pipeline de agregación

$set (agregación)

Nota

Desambiguación

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

$set

Agrega nuevos campos a los documentos. $set produce documentos que contienen todos los campos existentes de los documentos de entrada y los campos recién añadidos.

La $set etapa es un alias de $addFields.

Ambas etapas son equivalentes a una $project etapa que especifica explícitamente todos los campos existentes en los documentos de entrada y agrega los nuevos campos.

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.

$set tiene la siguiente forma:

{ $set: { <newField>: <expression>, ... } }

Especifica el nombre de cada campo a agregar y establece su valor en una expresión de agregación. Para obtener más información sobre expresiones, consulta Expresiones.

Importante

Si el nombre del nuevo campo es el mismo que el de un campo existente (incluido _id), $set sobrescribirá el valor existente de ese campo con el valor de la expresión especificada.

$set añade nuevos campos a documentos existentes. Puedes incluir una o más etapas $set en una operación de agregación.

Para añadir uno o varios campos a los documentos incrustados (incluidos los documentos en arrays), utiliza la notación de puntos. See ejemplo.

Para agregar un elemento a un campo de arreglo existente con $set, úsalo con $concatArrays. Consulta el ejemplo.

Cree una colección de muestra scores con lo siguiente:

db.scores.insertMany( [
{ _id: 1, student: "Maya", homework: [ 10, 5, 10 ], quiz: [ 10, 8 ], extraCredit: 0 },
{ _id: 2, student: "Ryan", homework: [ 5, 6, 5 ], quiz: [ 8, 8 ], extraCredit: 8 }
] )

La siguiente operación utiliza dos $set etapas para incluir tres nuevos campos en los documentos de salida:

db.scores.aggregate( [
{
$set: {
totalHomework: { $sum: "$homework" },
totalQuiz: { $sum: "$quiz" }
}
},
{
$set: {
totalScore: { $add: [ "$totalHomework", "$totalQuiz", "$extraCredit" ] } }
}
] )

La operación devuelve los siguientes documentos:

[
{
_id: 1,
student: "Maya",
homework: [ 10, 5, 10 ],
quiz: [ 10, 8 ],
extraCredit: 0,
totalHomework: 25,
totalQuiz: 18,
totalScore: 43
},
{
_id: 2,
student: "Ryan",
homework: [ 5, 6, 5 ],
quiz: [ 8, 8 ],
extraCredit: 8,
totalHomework: 16,
totalQuiz: 16,
totalScore: 40
}
]

Utilice la notación de puntos para agregar nuevos campos a los documentos incrustados.

Crea una colección de muestra vehicles con lo siguiente:

db.vehicles.insertMany( [
{ _id: 1, type: "car", specs: { doors: 4, wheels: 4 } },
{ _id: 2, type: "motorcycle", specs: { doors: 0, wheels: 2 } },
{ _id: 3, type: "jet ski" }
] )

La siguiente operación de agregación agrega un nuevo campo fuel_type al documento incrustado specs.

db.vehicles.aggregate( [
{ $set: { "specs.fuel_type": "unleaded" } }
] )

La operación devuelve los siguientes resultados:

[
{ _id: 1, type: "car", specs: { doors: 4, wheels: 4, fuel_type: "unleaded" } },
{ _id: 2, type: "motorcycle", specs: { doors: 0, wheels: 2, fuel_type: "unleaded" } },
{ _id: 3, type: "jet ski", specs: { fuel_type: "unleaded" } }
]

Al especificar un nombre de campo existente en una operación de $set, se reemplaza el campo original.

Cree una colección de muestra llamada animals con lo siguiente:

db.animals.insertOne( { _id: 1, dogs: 10, cats: 15 } )

La siguiente operación $set sobrescribe el campo cats:

db.animals.aggregate( [
{ $set: { cats: 20 } }
] )

La operación devuelve el siguiente documento:

[ { _id: 1, dogs: 10, cats: 20 } ]

Es posible reemplazar un campo por otro. En el siguiente ejemplo, el campo item sustituye al campo _id.

Crea una colección de muestra llamada fruits que contenga los siguientes documentos:

db.fruits.insertMany( [
{ _id: 1, item: "tangerine", type: "citrus" },
{ _id: 2, item: "lemon", type: "citrus" },
{ _id: 3, item: "grapefruit", type: "citrus" }
] )

La siguiente operación de agregación utiliza $set para reemplazar el campo _id de cada documento con el valor del campo item, y reemplaza el campo item con una string "fruit".

db.fruits.aggregate( [
{ $set: { _id: "$item", item: "fruit" } }
] )

La operación devuelve lo siguiente:

[
{ _id: "tangerine", item: "fruit", type: "citrus" },
{ _id: "lemon", item: "fruit", type: "citrus" },
{ _id: "grapefruit", item: "fruit", type: "citrus" }
]

Cree una colección de muestra scores con lo siguiente:

db.scores.insertMany( [
{ _id: 1, student: "Maya", homework: [ 10, 5, 10 ], quiz: [ 10, 8 ], extraCredit: 0 },
{ _id: 2, student: "Ryan", homework: [ 5, 6, 5 ], quiz: [ 8, 8 ], extraCredit: 8 }
] )

Puedes usar $set con una expresión $concatArrays para agregar un elemento a un campo de arreglo existente. Por ejemplo, la siguiente operación usa $set para reemplazar el campo homework con un nuevo arreglo cuyos elementos son el arreglo actual homework concatenado con otro arreglo que contiene una nueva puntuación [ 7 ].

db.scores.aggregate( [
{ $match: { _id: 1 } },
{ $set: { homework: { $concatArrays: [ "$homework", [ 7 ] ] } } }
] )

La operación devuelve lo siguiente:

[ { _id: 1, student: "Maya", homework: [ 10, 5, 10, 7 ], quiz: [ 10, 8 ], extraCredit: 0 } ]

Cree una colección de muestra scores con lo siguiente:

db.scores.insertMany( [
{ _id: 1, student: "Maya", homework: [ 10, 5, 10 ], quiz: [ 10, 8 ], extraCredit: 0 },
{ _id: 2, student: "Ryan", homework: [ 5, 6, 5 ], quiz: [ 8, 8 ], extraCredit: 8 }
] )

La siguiente operación de agregación añade un nuevo campo quizAverage a cada documento que contiene el promedio del arreglo quiz.

db.scores.aggregate( [
{
$set: {
quizAverage: { $avg: "$quiz" }
}
}
] )

La operación devuelve los siguientes documentos:

[
{
_id: 1,
student: 'Maya',
homework: [ 10, 5, 10 ],
quiz: [ 10, 8 ],
extraCredit: 0,
quizAverage: 9
},
{
_id: 2,
student: 'Ryan',
homework: [ 5, 6, 5 ],
quiz: [ 8, 8 ],
extraCredit: 8,
quizAverage: 8
}
]

Volver

$search

En esta página