> For the complete MongoDB documentation index, see www.mongodb.com/docs/llms.txt

<!--
Tab options on this page. Append to the .md URL to filter:
  ?tabs=<id,...>   select specific tabs (e.g. ?tabs=nodejs,shell)
  ?allTabs=true    include every tab
  (no param)       default: one tab per tabset

Available tabs:
  other tabs: degrees, radians
-->

# $atan2 (expression operator)

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`](https://www.mongodb.com/docs/manual/reference/operator/aggregation/atan2.md#mongodb-expression-exp.-atan2) has the following syntax:

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

[`$atan2`](https://www.mongodb.com/docs/manual/reference/operator/aggregation/atan2.md#mongodb-expression-exp.-atan2) takes any valid [expression](https://www.mongodb.com/docs/manual/reference/mql/expressions.md#std-label-aggregation-expressions) that resolves to a number.

[`$atan2`](https://www.mongodb.com/docs/manual/reference/operator/aggregation/atan2.md#mongodb-expression-exp.-atan2) returns values in radians. Use [`$radiansToDegrees`](https://www.mongodb.com/docs/manual/reference/operator/aggregation/radianstodegrees.md#mongodb-expression-exp.-radiansToDegrees) operator to convert the output value from radians to degrees.

By default [`$atan2`](https://www.mongodb.com/docs/manual/reference/operator/aggregation/atan2.md#mongodb-expression-exp.-atan2) returns values as a `double`. [`$atan2`](https://www.mongodb.com/docs/manual/reference/operator/aggregation/atan2.md#mongodb-expression-exp.-atan2) can also return values as a [128-bit decimal](https://www.mongodb.com/docs/mongodb-shell/reference/data-types.md#std-label-shell-type-decimal) as long as the `<expression>` resolves to a 128-bit decimal value.

For more information on expressions, see [Expressions.](https://www.mongodb.com/docs/manual/reference/mql/expressions.md#std-label-aggregation-expressions)

## 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 |
| --- | --- |
| `{ $atan2: [ NaN, <value> ] }` | `NaN` |
| `{ $atan2: [ <value>, NaN ] }` | `NaN` |
| `{ $atan2: [ null, <value> ] }` | `null` |
| `{ $atan2: [ <value>, null ] }` | `null` |
| `{ $atan2: [ NaN, null ] }` | `null` |
| `{ $atan2: [ null, NaN ] }` | `null` |

## Example

### Inverse Tangent of Value in Degrees

The `trigonometry` collection contains a document that stores three sides of a right-angle triangle:

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

The following aggregation operation uses the [`$atan2`](https://www.mongodb.com/docs/manual/reference/operator/aggregation/atan2.md#mongodb-expression-exp.-atan2) expression to calculate the angle adjacent to `side_a` and add it to the input document using the [`$addFields`](https://www.mongodb.com/docs/manual/reference/operator/aggregation/addfields.md#mongodb-pipeline-pipe.-addFields) pipeline stage.

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

The [`$radiansToDegrees`](https://www.mongodb.com/docs/manual/reference/operator/aggregation/radianstodegrees.md#mongodb-expression-exp.-radiansToDegrees) expression converts the radian value returned by [`$atan2`](https://www.mongodb.com/docs/manual/reference/operator/aggregation/atan2.md#mongodb-expression-exp.-atan2) to the equivalent value in degrees.

The command returns the following output:

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

Since `side_b` and `side_a` are stored as [128-bit decimals](https://www.mongodb.com/docs/mongodb-shell/reference/data-types.md#std-label-shell-type-decimal), the output of [`$atan2`](https://www.mongodb.com/docs/manual/reference/operator/aggregation/atan2.md#mongodb-expression-exp.-atan2) is a 128-bit decimal.
