Docs Menu
Docs Home
/ /
Operadores de tuberías de agregación

$getField (operador de expresión)

$getField

Nuevo en la versión 5.0.

Devuelve el valor de un campo especificado 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 para devolver su $literal valor.

input

Objeto

Predeterminado: $$CURRENT

Una expresión válida que contiene el field para el que se desea devolver un valor. input debe resolverse en unmissing objeto,, null undefinedo. Si se omite, se toma como valor predeterminado el documento que se está procesando actualmente en la canalización$$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 se resuelve en algo distinto a una constante de cadena, devuelve un$getField error.

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

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

  • Si se input evalúa como algo distinto de unmissing objeto,, undefined nullo, devuelve un$getField 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 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 }
]

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 }
]

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 $lte iguales 20 a.

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

  • $getField usa 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 }
}
]

Volver

$function

En esta página