Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La fase $addFields de la canalización de agregación se usa para agregar nuevos campos a los documentos. También se puede usar para restablecer los valores de los campos existentes. Esta fase resulta especialmente útil cuando sea necesario crear nuevos campos basados en datos existentes o modificar campos existentes dentro de los documentos.
Sintaxis
La sintaxis básica de la fase $addFields es la siguiente:
{
$addFields: {
<newField1>: <expression1>,
<newField2>: <expression2>,
...
}
}
Parámetros
Descripción | |
---|---|
newField1 |
Nombre del nuevo campo que se agregará o del campo existente que se modificará. |
expression1 |
Expresión para calcular el valor de newField1. |
Ejemplos
Ejemplo 1: agregar un nuevo campo
Supongamos que tenemos una colección denominada tiendas con documentos similares a la estructura JSON proporcionada. Para agregar un nuevo campo totalDiscountEvents que cuente el número de eventos de promoción, usaremos la siguiente canalización de agregación:
db.stores.aggregate([
{
$addFields: {
totalDiscountEvents: { $size: "$store.promotionEvents" }
}
}
])
Salida de ejemplo
[
{
"_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
"store": {
"name": "Downtown Store",
"promotionEvents": ["Summer Sale", "Black Friday", "Holiday Deals"]
},
"totalDiscountEvents": 3
}
]
Ejemplo 2: modificar un campo existente
Si queremos agregar un campo totalStaffCount que sume el personal a tiempo completo y a tiempo parcial, usaremos:
db.stores.aggregate([
{
$addFields: {
totalStaffCount: {
$add: ["$store.staff.totalStaff.fullTime", "$store.staff.totalStaff.partTime"]
}
}
}
])
Salida de ejemplo
[
{
"_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
"store": {
"name": "Downtown Store",
"staff": {
"totalStaff": {
"fullTime": 12,
"partTime": 8
}
}
},
"totalStaffCount": 20
}
]
Ejemplo 3: agregar campos anidados
Para agregar una ubicación de campo location.coordinates que combine latitud y longitud en una matriz, use:
db.stores.aggregate([
{
$addFields: {
"store.location.coordinates": ["$store.location.lat", "$store.location.lon"]
}
}
])
Salida de ejemplo
[
{
"_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
"store": {
"name": "Downtown Store",
"location": {
"lat": 47.6097,
"lon": -122.3331,
"coordinates": [47.6097, -122.3331]
}
}
}
]
Contenido relacionado
- Revise las opciones para migrar de MongoDB a Azure Cosmos DB para MongoDB (vCore).
- Para empezar, cree una cuenta.