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

$let ( operador de expressão )

$let

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

The $let expression has the following syntax:

{
$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 Expressões. 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 can access variables defined outside its expression block, including system variables.

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.

For example, consider the following $let expression:

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

In the vars assignment block, "$$low" refers to the value of an externally defined variable low and not the variable defined in the same vars block. If low is not defined outside this $let expression block, the expression is invalid.

Uma coleção sales tem os seguintes documentos:

db.sales.insertMany( [
{ _id: 1, price: 10, tax: 0.50, applyDiscount: true },
{ _id: 2, price: 10, tax: 0.25, applyDiscount: false }
] )

The following aggregation uses $let in the $project pipeline stage to calculate and return the finalTotal for each document:

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

$map

Avalie esta página