Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
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.

Puedes usar $getField para recuperar el valor de campos cuyos nombres contienen puntos (.) o comienzan con signos de dólar ($).

Tip

Utilizar $setField para añadir o actualizar campos con nombres que contengan signos de dólar ($) o puntos (.).

$getField tiene la siguiente sintaxis:

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

field

String

Campo en el objeto input para el que deseas devolver un valor. field puede ser cualquier expresión válida que dé como resultado una constante string.

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 input evalúa como missing, undefined o null, $getField devuelve null.

  • 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 o arreglos. Por ejemplo, $getField evalúa un valor field de a.b.c como un campo de nivel superior a.b.c en lugar de un campo anidado { a: { b: { c: } } }.

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