Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

$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 especifica un objeto, devuelve el valor del$getField campo $$CURRENT de.

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

No confíe en los nombres de campo con prefijo de dólar de nivel raíz que chocan con los nombres de campo de metadatos internos reservados, ya que esos campos pueden descartarse o ser inaccesibles en algunos contextos de procesamiento de query. Para obtener restricciones y orientación sobre los nombres de campo que contienen signos de dólar ($) o puntos (.), consulte Nombres de campo con puntos y 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

Objeto de entrada para el que deseas devolver un valor.

Modificado 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 ($), 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 $$CURRENT de:

{
$getField: <String>
}

Para esta sintaxis, el argumento es equivalente al valor de field descrito anteriormente.

  • 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 a unmissing objeto,, undefined nullo, devuelve un$getField error.

  • $getField no recorre implícitamente objetos o 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 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 parámetros field y explícitos input porque el $small campo es parte de un subdocumento.

  • $getField utiliza para $literal evaluar$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 }
}
]