Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

$let (agregação)

Nesta página

  • Definição
  • Comportamento
  • Exemplo
$let

Vincula variáveis para utilizar na expressão especificada e retorna o resultado da expressão.

A expressão $let tem a seguinte sintaxe:

{
$let:
{
vars: { <var1>: <expression>, ... },
in: <expression>
}
}
Campo
Especificação
vars

Bloco de atribuição para as variáveis acessíveis na expressão in. Para atribuir uma variável, especifique uma string para o nome da variável e atribua uma expressão válida para o valor.

As atribuições de variáveis não têm significado fora da expressão in , nem mesmo dentro do próprio bloco vars .

in
A expressão para avaliar.

Para acessar variáveis em expressões de agregação, prefixe o nome da variável com sinais de dólar duplo ($$) e entre aspas. Para mais informações sobre expressões, consulte Operadores de Expressão. Para obter informações sobre o uso de variáveis no pipeline de agregação, consulte Variáveis em Expressões de agregação.

$let pode acessar variáveis definidas fora de seu bloco de expressão, incluindo variáveis do sistema.

Se você modificar os valores de variáveis definidas externamente no bloco vars, os novos valores terão efeito somente na expressão in. Fora da expressão in, as variáveis retêm seus valores anteriores.

No bloco de atribuição vars, a ordem da atribuição não importa, e as atribuições de variáveis só têm significado dentro da expressão in. Como tal, acessar o valor de uma variável no bloco de tarefa vars refere-se ao valor da variável definida fora do bloco vars e não dentro do mesmo bloco vars.

Por exemplo, considere a seguinte expressão $let :

{
$let:
{
vars: { low: 1, high: "$$low" },
in: { $gt: [ "$$low", "$$high" ] }
}
}

No bloco de atribuição vars , "$$low" se refere ao valor de uma variável definida externamente low e não à variável definida no mesmo bloco vars . Se low não for definido fora desse bloco de expressão $let , a expressão será inválida.

Uma coleção sales tem os seguintes documentos:

{ _id: 1, price: 10, tax: 0.50, applyDiscount: true }
{ _id: 2, price: 10, tax: 0.25, applyDiscount: false }

A agregação a seguir usa $let no estágio de pipeline $project para calcular e retornar o finalTotal para cada documento:

db.sales.aggregate( [
{
$project: {
finalTotal: {
$let: {
vars: {
total: { $add: [ '$price', '$tax' ] },
discounted: { $cond: { if: '$applyDiscount', then: 0.9, else: 1 } }
},
in: { $multiply: [ "$$total", "$$discounted" ] }
}
}
}
}
] )

A agregação retorna os seguintes resultados:

{ "_id" : 1, "finalTotal" : 9.450000000000001 }
{ "_id" : 2, "finalTotal" : 10.25 }

Dica

Veja também:

← $lastN