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
/ /
Operadores de pipeline de agregación

$getField (operador de expresión)

$getField

Nuevo en la versión 5.0.

Devuelve el valor de un campo específico de un documento. Si no se especifica un objeto, $getField devuelve el valor del campo de $$CURRENT.

Puede utilizar para recuperar el valor de los campos con nombres que contienen puntos $getField (). o comienzan con signos de dólar$ ().

Tip

Utilice para agregar o actualizar campos con nombres que contengan signos de dólar $setField ()$ o puntos. ().

$getField tiene la siguiente sintaxis:

{
$getField: {
field: <String>,
input: <Object>
}
}
Campo
Tipo
Descripción

field

String

Campo en el input objeto para el cual desea devolver un valor. field puede ser cualquier expresión válida que se resuelva en una constante de cadena.

Si field comienza con un signo de dólar ($), coloque el nombre del campo dentro de una expresión $literal para devolver su valor.

input

Objeto

Por defecto: $$CURRENT

Una expresión válida que contenga el field para el que deseas devolver un valor. input debe resolverse en un objeto, missing, null o undefined. Si se omite, se utiliza por defecto el documento que se está procesando actualmente en el pipeline ($$CURRENT).

$getField tiene la siguiente sintaxis abreviada para recuperar valores de campo de $$CURRENT:

{
$getField: <String>
}

Para esta sintaxis, el argumento es equivalente al valor de field descrito anteriormente.

  • Si field resuelve cualquier cosa que no sea una constante de string, $getField devuelve un error.

  • Si el field que especificas no está presente en el objeto input, o en $$CURRENT si no especificas un objeto input, $getField devuelve missing.

  • Si se input evalúa missing como, undefined o,null $getField nulldevuelve.

  • Si input evalúa cualquier cosa que no sea un objeto, missing, undefined o null, $getField devuelve un error.

  • $getField no recorre implícitamente objetos ni matrices. Por ejemplo, evalúa$getField un field valor de a.b.c como un campo de nivel superior a.b.c en lugar de un campo { a: { b: { c: } } } anidado.

Considere una colección inventory con los siguientes documentos:

db.inventory.insertMany( [
{ _id: 1, item: "sweatshirt", "price.usd": 45.99, qty: 300 },
{ _id: 2, item: "winter coat", "price.usd": 499.99, qty: 200 },
{ _id: 3, item: "sun dress", "price.usd": 199.99, qty: 250 },
{ _id: 4, item: "leather boots", "price.usd": 249.99, qty: 300 },
{ _id: 5, item: "bow tie", "price.usd": 9.99, qty: 180 }
] )

La siguiente operación utiliza los operadores $getField y $gt para encontrar qué productos tienen un price.usd mayor que 200:

db.inventory.aggregate( [
{
$match:
{ $expr:
{ $gt: [ { $getField: "price.usd" }, 200 ] }
}
}
] )

La operación devuelve los siguientes resultados:

[
{ _id: 2, item: 'winter coat', qty: 200, 'price.usd': 499.99 },
{ _id: 4, item: 'leather boots', qty: 300, 'price.usd': 249.99 }
]

Considere una colección inventory con los siguientes documentos:

db.inventory.insertMany( [
{ _id: 1, item: "sweatshirt", "$price": 45.99, qty: 300 },
{ _id: 2, item: "winter coat", "$price": 499.99, qty: 200 },
{ _id: 3, item: "sun dress", "$price": 199.99, qty: 250 },
{ _id: 4, item: "leather boots", "$price": 249.99, qty: 300 },
{ _id: 5, item: "bow tie", "$price": 9.99, qty: 180 }
] )

La siguiente operación utiliza los operadores $getField, $gt y $literal para encontrar qué productos tienen un $price mayor que 200:

db.inventory.aggregate( [
{
$match:
{ $expr:
{ $gt: [ { $getField: {$literal: "$price" } }, 200 ] }
}
}
] )

La operación devuelve los siguientes resultados:

[
{ _id: 2, item: 'winter coat', qty: 200, '$price': 499.99 },
{ _id: 4, item: 'leather boots', qty: 300, '$price': 249.99 }
]

Crea una colección de inventory con los siguientes documentos:

db.inventory.insertMany( [
{ _id: 1, item: "sweatshirt", "price.usd": 45.99,
quantity: { "$large": 50, "$medium": 50, "$small": 25 }
},
{ _id: 2, item: "winter coat", "price.usd": 499.99,
quantity: { "$large": 35, "$medium": 35, "$small": 35 }
},
{ _id: 3, item: "sun dress", "price.usd": 199.99,
quantity: { "$large": 45, "$medium": 40, "$small": 5 }
},
{ _id: 4, item: "leather boots", "price.usd": 249.99,
quantity: { "$large": 20, "$medium": 30, "$small": 40 }
},
{ _id: 5, item: "bow tie", "price.usd": 9.99,
quantity: { "$large": 0, "$medium": 10, "$small": 75 }
}
] )

La siguiente operación devuelve documentos donde el número de elementos $small es menor o igual a 20.

db.inventory.aggregate( [
{ $match:
{ $expr:
{ $lte:
[
{ $getField:
{ field: { $literal: "$small" },
input: "$quantity"
}
},
20
]
}
}
}
] )

Utiliza estos operadores para consultar query la colección:

  • El operador $lte encuentra valores menores o iguales a 20.

  • $getField requiere los parámetros explícitos field y input porque el campo $small forma parte de un subdocumento.

  • $getField utiliza $literal para evaluar "$small", por tener el nombre del campo un símbolo de dólar ($) en el mismo.

Ejemplo de salida:

[
{
_id: 3,
item: 'sun dress',
'price.usd': 199.99,
quantity: { '$large': 45, '$medium': 40, '$small': 5 }
}
]

Volver

$function

En esta página