Definición
$getFieldNuevo en la versión 5.0.
Devuelve el valor de un campo especificado de un documento. Si no se especifica un objeto,
$getFielddevuelve 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.().
Sintaxis
$getField tiene la siguiente sintaxis:
{ $getField: { field: <String>, input: <Object> } }
Campo | Tipo | Descripción |
|---|---|---|
| String | |
| Objeto | Predeterminado: Una expresión válida que contiene el |
$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.
Comportamiento
Si
fieldse resuelve en algo distinto a una constante de cadena, devuelve un$getFielderror.Si el
fieldque especifica no está presente en elinputobjeto, o en si$$CURRENTno especifica uninputobjeto,$getFieldmissingdevuelve.Si se
inputevalúamissingcomo,undefinedo,null$getFieldnulldevuelve.Si se
inputevalúa como algo distinto de unmissingobjeto,,undefinednullo, devuelve un$getFielderror.$getFieldno recorre implícitamente objetos ni matrices. Por ejemplo, evalúa$getFieldunfieldvalor dea.b.ccomo un campo de nivel superiora.b.cen lugar de un campo{ a: { b: { c: } } }anidado.
Ejemplos
Campos de consulta que contienen puntos. ()
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 para encontrar qué productos tienen un $gt price.usd mayor 200 que:
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 } ]
Campos de consulta que comienzan con un signo de dólar$ ()
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 $getField operadores, $gt y para encontrar qué productos tienen $literal un $price mayor 200 que:
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 } ]
Query un campo en un subdocumento
Crea una colección 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 $small elementos es menor o igual a 20.
db.inventory.aggregate( [ { $match: { $expr: { $lte: [ { $getField: { field: { $literal: "$small" }, input: "$quantity" } }, 20 ] } } } ] )
Utilice estos operadores para consultar la colección:
El operador encuentra valores menores o
$lteiguales 20 a.$getFieldrequierefieldinputparámetros explícitos y porque el$smallcampo es parte de un subdocumento.$getFieldusa para evaluar$literal"$small", porque el nombre del campo tiene un signo de dólar$().
Ejemplo de salida:
[ { _id: 3, item: 'sun dress', 'price.usd': 199.99, quantity: { '$large': 45, '$medium': 40, '$small': 5 } } ]