$atan2 (aggregation)
$atan2Returns the inverse tangent (arc tangent) of
y / x, whereyandxare the first and second values passed to the expression respectively.$atan2has the following syntax:{ $atan2: [ <expression 1>, <expression 2> ] } $atan2takes any valid expression that resolves to a number.$atan2returns values in radians. Use$radiansToDegreesoperator to convert the output value from radians to degrees.By default
$atan2returns values as adouble.$atan2can also return values as a 128-bit decimal as long as the<expression>resolves to a 128-bit decimal value.For more information on expressions, see Expression Operators.
Behavior
null and NaN
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.
Example | Results |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Example
The trigonometry collection contains a document that
stores three sides of a right-angle triangle:
{ "_id" : ObjectId("5c50782193f833234ba90d85"), "side_a" : NumberDecimal("3"), "side_b" : NumberDecimal("4"), "hypotenuse" : NumberDecimal("5") }
The following aggregation operation uses the
$atan2 expression to calculate the angle adjacent
to side_a and add it to the input document using the
$addFields pipeline stage.
db.trigonometry.aggregate([ { $addFields : { "angle_a" : { $radiansToDegrees : { $atan2 : [ "$side_b", "$side_a" ] } } } } ])
The $radiansToDegrees expression converts the
radian value returned by $atan2 to the equivalent
value in degrees.
The command returns the following output:
{ "_id" : ObjectId("5c50782193f833234ba90d85"), "side_a" : NumberDecimal("3"), "side_b" : NumberDecimal("4"), "hypotenuse" : NumberDecimal("5"), "angle_a" : NumberDecimal("53.13010235415597870314438744090658") }
Since side_b and side_a are stored as
128-bit decimals, the output of
$atan2 is a 128-bit decimal.
The trigonometry collection contains a document that
stores three sides of a right-angle triangle:
{ "_id" : ObjectId("5c50782193f833234ba90d85"), "side_a" : NumberDecimal("3"), "side_b" : NumberDecimal("4"), "hypotenuse" : NumberDecimal("5") }
The following aggregation operation uses the
$atan2 expression to calculate the angle adjacent
to side_a and add it to the input document using the
$addFields pipeline stage.
db.trigonometry.aggregate([ { $addFields : { "angle_a" : { $atan2 : [ "$side_b", "$side_a" ] } } } ])
The command returns the following output:
{ "_id" : ObjectId("5c50782193f833234ba90d85"), "side_a" : NumberDecimal("3"), "side_b" : NumberDecimal("4"), "hypotenuse" : NumberDecimal("5"), "angle_a" : NumberDecimal("0.9272952180016122324285124629224287") }
Since side_b and side_a are stored as
128-bit decimals, the output of
$atan2 is a 128-bit decimal.