Docs Menu
Docs Home
/ /
Pipeline de agregación
/ / /

Rutas de campos

Puedes utilizar Expresiones de ruta de campo para acceder a los campos en los documentos de entrada. Para especificar una ruta de campo, anteponga el signo de dólar al nombre del campo o a la ruta de campo con puntos (si el campo está en un documento incrustado). $.

Puedes usar rutas de campo para los siguientes casos de uso:

El siguiente ejemplo utiliza la colección planets de las Atlas Bases de Datos de Muestra. Cada documento de esta colección tiene la siguiente estructura:

{
_id: new ObjectId("6220f6b78a733c51b416c80e"),
name: "Uranus",
orderFromSun: 7,
hasRings: true,
mainAtmosphere: [ "H2", "He", "CH4" ],
surfaceTemperatureC: { min: null, max: null, mean: -197.2 }
}

Para especificar el campo anidado mean dentro del campo surfaceTemperatureC, utiliza la notación de puntos ("field.nestedField") con un signo de dólar $. El siguiente pipeline de agregación proyecta solo el valor del campo anidado mean para cada documento:

db.planets.aggregate( [
{
$project: {
nested_field: "$surfaceTemperatureC.mean"
}
}
] )

A continuación se muestra un ejemplo de documento devuelto:

{ _id: ObjectId('6220f6b78a733c51b416c80e'), nested_field: -197.2 }

Puedes utilizar la notación de puntos en una ruta de campo para acceder a un campo que está anidado dentro de un arreglo.

Por ejemplo, considera una colección products que contiene un campo instock. El campo instock contiene un arreglo de campos warehouse anidados.

db.products.insertMany( [
{ item: "journal", instock: [ { warehouse: "A"}, { warehouse: "C" } ] },
{ item: "notebook", instock: [ { warehouse: "C" } ] },
{ item: "paper", instock: [ { warehouse: "A" }, { warehouse: "B" } ] },
{ item: "planner", instock: [ { warehouse: "A" }, { warehouse: "B" } ] },
{ item: "postcard", instock: [ { warehouse: "B" }, { warehouse: "C" } ] }
] )

La siguiente canalización de agregación utiliza $instock.warehouse para acceder a los campos warehouse anidados.

db.products.aggregate( [
{
$project: {
item: 1,
warehouses: "$instock.warehouse"
}
}
] )

En este ejemplo, $instock.warehouse genera un arreglo de valores que están en el campo warehouse anidado para cada documento. El pipeline devuelve los siguientes documentos:

[
{
_id: ObjectId('6740b55e33b29cf6b1d884f7'),
item: "journal",
warehouses: [ "A", "C" ]
},
{
_id: ObjectId('6740b55e33b29cf6b1d884f8'),
item: "notebook",
warehouses: [ "C" ]
},
{
_id: ObjectId('6740b55e33b29cf6b1d884f9'),
item: "paper",
warehouses: [ "A", "B" ]
},
{
_id: ObjectId('6740b55e33b29cf6b1d884fa'),
item: "planner",
warehouses: [ "A", "B" ]
},
{
_id: ObjectId('6740b55e33b29cf6b1d884fb'),
item: "postcard",
warehouses: [ "B", "C" ]
}
]

También puedes utilizar la notación de puntos con un signo de dólar $ en una ruta de campo para acceder a un arreglo dentro de un arreglo anidado.

Este ejemplo utiliza una colección fruits que contiene el siguiente documento:

db.fruits.insertOne(
{
_id: ObjectId("5ba53172ce6fa2fcfc58e0ac"),
inventory: [
{
apples: [
"macintosh",
"golden delicious",
]
},
{
oranges: [
"mandarin",
]
},
{
apples: [
"braeburn",
"honeycrisp",
]
}
]
}
)

El documento de la colección contiene un inventory arreglo donde cada elemento del arreglo es un objeto que contiene un campo de arreglo anidado.

Considere la siguiente canalización de agregación:

db.fruits.aggregate( [
{ $project:
{ all_apples: "$inventory.apples" } }
] )

En este pipeline, $inventory.apples se resuelve en un arreglo de matrices anidadas. El pipeline devuelve el siguiente documento:

{
_id: ObjectId('5ba53172ce6fa2fcfc58e0ac'),
all_apples: [
[ "macintosh", "golden delicious" ],
[ "braeburn", "honeycrisp" ]
]
}

Para obtener más información sobre cómo acceder e interactuar con elementos anidados, consulta Notación de Puntos y Consulta de un arreglo de documentos incrustados.

Volver

Pipeline de agregación

En esta página