Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

$getField (operador de expressão )

$getField

Novidades na versão 5.0.:

Retorna o valor de um campo especificado de um documento. Se você não especificar um objeto, $getField retornará o valor do campo de $$CURRENT.

Você pode usar $getField para recuperar o valor de campos com nomes que contenham pontos (.) ou comecem com cifrões ($).

Não confie em nomes de campo prefixados em dólar de nível raiz que colidem com nomes de campo de metadados internos reservados, pois esses campos podem ser descartados ou inacessíveis em alguns contextos de processamento de query. Para restrições e orientações sobre nomes de campo que contêm cifrões$ () ou pontos. (), consulte Nomes de campos com pontos e cifrões.

Dica

Use $setField para adicionar ou atualizar campos com nomes que contenham cifrões ($) ou pontos (.).

$getField tem a seguinte sintaxe:

{
$getField: {
field: <String>,
input: <Object>
}
}
Campo
Tipo
Descrição

field

String

objeto de entrada para o qual você deseja retornar um valor.

Alterado na versão 7.2.:

field aceita qualquer expressão válida que se resolva para uma string.

Se field o começar com um sinal de dólar$ (), coloque o nome do campo dentro de uma $literal expressão para retornar seu valor.

input

Objeto

Padrão: $$CURRENT

Uma expressão válida que contém o field para o qual você deseja retornar um valor. input deve resolver para um objeto, missing, null ou undefined. Se omitido, o padrão é o documento atualmente sendo processado no pipeline ($$CURRENT).

$getField tem a seguinte sintaxe reduzida para recuperar valores de campo de $$CURRENT:

{
$getField: <String>
}

Para esta sintaxe, o argumento é equivalente ao valor de field descrito acima.

  • Se o field que você especificar não estiver presente no objeto input ou em $$CURRENT se você não especificar um objeto input, $getField retornará missing.

  • Se input avaliar como missing, undefined ou null, $getField retornará null.

  • Se input for avaliado como algo diferente de um objeto, missing, undefined ou null, $getField retornará um erro.

  • $getField não atravessa implicitamente objetos ou arrays. Por exemplo, $getField avalia um valor field de a.b.c como um campo de nível superior a.b.c em vez de um campo aninhado { a: { b: { c: } } }.

Considere uma coleção inventory com os seguintes 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 }
] )

A operação a seguir utiliza os operadores $getField e $gt para descobrir quais produtos têm price.usd maior que 200:

db.inventory.aggregate( [
{
$match:
{ $expr:
{ $gt: [ { $getField: "price.usd" }, 200 ] }
}
}
] )

A operação retorna os seguintes resultados:

[
{ _id: 2, item: 'winter coat', qty: 200, 'price.usd': 499.99 },
{ _id: 4, item: 'leather boots', qty: 300, 'price.usd': 249.99 }
]

Considere uma coleção inventory com os seguintes 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 }
] )

A operação a seguir usa os operadores $getField, $gt e $literal para descobrir quais produtos têm $price maior que 200:

db.inventory.aggregate( [
{
$match:
{ $expr:
{ $gt: [ { $getField: {$literal: "$price" } }, 200 ] }
}
}
] )

A operação retorna os seguintes resultados:

[
{ _id: 2, item: 'winter coat', qty: 200, '$price': 499.99 },
{ _id: 4, item: 'leather boots', qty: 300, '$price': 249.99 }
]

Cria uma collection inventory com os seguintes 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 }
}
] )

A operação seguinte retorna documentos onde o número de $small itens é menor ou igual a 20.

db.inventory.aggregate( [
{ $match:
{ $expr:
{ $lte:
[
{ $getField:
{ field: { $literal: "$small" },
input: "$quantity"
}
},
20
]
}
}
}
] )

Use estes operadores para consultar a coleção:

  • O operador $lte localiza valores menores ou iguais a 20.

  • $getField requer parâmetros field e input explícitos porque o campo $small faz parte de um subdocumento.

  • $getField utiliza $literal para avaliar "$small", pois o nome do campo tem um sinal de dólar ($).

Saída de exemplo:

[
{
_id: 3,
item: 'sun dress',
'price.usd': 199.99,
quantity: { '$large': 45, '$medium': 40, '$small': 5 }
}
]