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

Novidade na versão 5.0.

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

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

Não confie em nomes de campo com prefixo de 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 campo 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

Campo no objeto input para o qual você deseja retornar um valor. O field pode ser qualquer expressão válida que resolva para uma constante de string.

Se o field começar com um sinal de dólar ($), coloque o nome do campo dentro de uma expressão $literal 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 de mão curta para recuperar valores de campo $$CURRENT de:

{
$getField: <String>
}

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

  • Se field resolver para algo diferente de uma constante de string, retornará um$getField erro.

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

  • Se o input avaliar missing para, undefined ou,null $getField nullretornará.

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

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

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 usa os operadores $getField e para localizar quais produtos têm $gt price.usd maior 200 que:

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 $getField $gtoperadores, e para localizar quais produtos $literal têm $price maior 200 que:

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 explícitos input porque o $small campo faz parte de um subdocumento.

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

Saída de exemplo:

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