Menu Docs

$atan2 (agregação)

$atan2

Returns the inverse tangent (arc tangent) of y / x, where y and x are the first and second values passed to the expression respectively.

$atan2 tem a seguinte sintaxe:

{ $atan2: [ <expression 1>, <expression 2> ] }

$atan2 usa qualquer expressão válida que resolva para um número.

$atan2 retorna valores em radianos. Utilize o operador $radiansToDegrees para converter o valor de saída de radianos para graus.

Por padrão, $atan2 retorna valores como double. $atan2 também pode retornar valores como um decimal de 128 bits, desde que o <expression> resolva para um valor decimal de 128 bits.

Para mais informações sobre expressões, consulte Expressões.

If either argument given to $atan2 is null, the expression returns null. If either argument is NaN, the expression returns NaN. If one argument is null and the other is NaN, the expression returns null.

Exemplo
Resultados

{ $atan2: [ NaN, <value> ] }

NaN

{ $atan2: [ <value>, NaN ] }

NaN

{ $atan2: [ null, <value> ] }

null

{ $atan2: [ <value>, null ] }

null

{ $atan2: [ NaN, null ] }

null

{ $atan2: [ null, NaN ] }

null

A coleção trigonometry contém um documento que armazena três lados de um triângulo retângulo:

{
"_id" : ObjectId("5c50782193f833234ba90d85"),
"side_a" : NumberDecimal("3"),
"side_b" : NumberDecimal("4"),
"hypotenuse" : NumberDecimal("5")
}

A operação de agregação a seguir usa a expressão $atan2 para calcular o ângulo adjacente a side_a e adicioná-lo ao documento de entrada usando o estágio de pipeline $addFields .

db.trigonometry.aggregate([
{
$addFields : {
"angle_a" : {
$radiansToDegrees : {
$atan2 : [ "$side_b", "$side_a" ]
}
}
}
}
])

A expressão $radiansToDegrees converte o valor radianos retornado por $atan2 para o valor equivalente em graus.

O comando retorna a seguinte saída:

{
"_id" : ObjectId("5c50782193f833234ba90d85"),
"side_a" : NumberDecimal("3"),
"side_b" : NumberDecimal("4"),
"hypotenuse" : NumberDecimal("5"),
"angle_a" : NumberDecimal("53.13010235415597870314438744090658")
}

Como side_b e side_a são armazenados como decimais de 128bits, a saída de $atan2 é um decimal de 128bits.

A coleção trigonometry contém um documento que armazena três lados de um triângulo retângulo:

{
"_id" : ObjectId("5c50782193f833234ba90d85"),
"side_a" : NumberDecimal("3"),
"side_b" : NumberDecimal("4"),
"hypotenuse" : NumberDecimal("5")
}

A operação de agregação a seguir usa a expressão $atan2 para calcular o ângulo adjacente a side_a e adicioná-lo ao documento de entrada usando o estágio de pipeline $addFields .

db.trigonometry.aggregate([
{
$addFields : {
"angle_a" : {
$atan2 : [ "$side_b", "$side_a" ]
}
}
}
])

O comando retorna a seguinte saída:

{
"_id" : ObjectId("5c50782193f833234ba90d85"),
"side_a" : NumberDecimal("3"),
"side_b" : NumberDecimal("4"),
"hypotenuse" : NumberDecimal("5"),
"angle_a" : NumberDecimal("0.9272952180016122324285124629224287")
}

Como side_b e side_a são armazenados como decimais de 128bits, a saída de $atan2 é um decimal de 128bits.