> 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
-->

# $asin (expression operator)

Returns the inverse sine (arc sine) of a value.

[`$asin`](https://www.mongodb.com/docs/manual/reference/operator/aggregation/asin.md#mongodb-expression-exp.-asin) has the following syntax:

```javascript
{ $asin: <expression> }
```

[`$asin`](https://www.mongodb.com/docs/manual/reference/operator/aggregation/asin.md#mongodb-expression-exp.-asin) takes any valid [expression](https://www.mongodb.com/docs/manual/reference/mql/expressions.md#std-label-aggregation-expressions) that resolves to a number between `-1` and `1`, e.g. `-1 <= value <= 1`.

[`$asin`](https://www.mongodb.com/docs/manual/reference/operator/aggregation/asin.md#mongodb-expression-exp.-asin) 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 [`$asin`](https://www.mongodb.com/docs/manual/reference/operator/aggregation/asin.md#mongodb-expression-exp.-asin) returns values as a `double`. [`$asin`](https://www.mongodb.com/docs/manual/reference/operator/aggregation/asin.md#mongodb-expression-exp.-asin) 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

If the argument resolves to a value of `null` or refers to a field that is missing, [`$asin`](https://www.mongodb.com/docs/manual/reference/operator/aggregation/asin.md#mongodb-expression-exp.-asin) returns `null`. If the argument resolves to `NaN`, [`$asin`](https://www.mongodb.com/docs/manual/reference/operator/aggregation/asin.md#mongodb-expression-exp.-asin) returns `NaN`. If the argument resolves to a value outside the bounds of `[-1, 1]` inclusive, [`$asin`](https://www.mongodb.com/docs/manual/reference/operator/aggregation/asin.md#mongodb-expression-exp.-asin) throws an error.

| Example | Results |
| --- | --- |
| `{ $asin: NaN }` | `NaN` |
| `{ $asin: null }` | `null` |
| `{ $asin : Infinity}` *or* `{ $asin : -Infinity }` | Throws an error message resembling the following formatted output: `"errmsg" :
  "Failed to optimize pipeline :: caused by :: cannot
  apply $asin to -inf, value must in [-1,1]"` |

## Example

### Inverse Sine 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 [`$asin`](https://www.mongodb.com/docs/manual/reference/operator/aggregation/asin.md#mongodb-expression-exp.-asin) expression to calculate the angle opposite 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 : {
          $asin : {
            $divide : [ "$side_a", "$hypotenuse" ]
          }
        }
      }
    }
  }
])
```

The [`$radiansToDegrees`](https://www.mongodb.com/docs/manual/reference/operator/aggregation/radianstodegrees.md#mongodb-expression-exp.-radiansToDegrees) expression converts the radian value returned by [`$asin`](https://www.mongodb.com/docs/manual/reference/operator/aggregation/asin.md#mongodb-expression-exp.-asin) 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("36.86989764584402129685561255909341")
}
```

Since `side_a` and `hypotenuse` 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 [`$asin`](https://www.mongodb.com/docs/manual/reference/operator/aggregation/asin.md#mongodb-expression-exp.-asin) is a 128-bit decimal.
