Learn the "why" behind slow queries and how to fix them in our 2-Part Webinar.
Register now >
Docs Menu
Docs Home
/ /

$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 especificas 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

Objeto de entrada para el que deseas devolver un valor.

Cambiado en la versión 7.2: field acepta cualquier expresión válida que se resuelva en una string.

Si field comienza con un signo de dólar ($), coloca el nombre del campo dentro de una expresión $literal o $toString para que se devuelva 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 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