Definición
$getFieldNuevo en la versión 5.0.
Devuelve el valor de un campo específico de un documento. Si no especificas 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 de entrada para el que deseas devolver un valor. Cambiado en la versión 7.2: Si |
| Objeto |
$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 el
fieldque especificas no está presente en el objetoinput, o en$$CURRENTsi no especificas un objetoinput,$getFielddevuelvemissing.Si se
inputevalúamissingcomo,undefinedo,null$getFieldnulldevuelve.Si
inputevalúa cualquier cosa que no sea un objeto,missing,undefinedonull,$getFielddevuelve un error.$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 query que contienen períodos (.)
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 } ]
Campos de consulta que comienzan con el 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 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 } ]
Query un campo en un subdocumento
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
$lteencuentra valores menores o iguales a 20.$getFieldrequiere los parámetros explícitosfieldyinputporque el campo$smallforma parte de un subdocumento.$getFieldutiliza$literalpara 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 } } ]