$acos操作符返回一个值的反余弦。从MongoDB4.2版本开始支持。
语法
{ $acos: <expression> }
$acos接受任何可被解析为值在-1到1之间的表达式,即:-1 <= value <= 1$acos返回值以弧度为单位,使用$radiansToDegrees操作符可以把输出值由弧度转换为角度。- 缺省情况下
$acos范围值为double,如果<expression>的值被解析为128-bit decimal,$acos也会返回128-bit decimal。
使用
如果参数被解析为null或不存在的字段,$acos返回null,如果参数为解析为NaN,$acos返回NaN,如果参数解析的值越界,即value∉[-1,1],$acos将抛出错误。
| 参数举例 | 返回值 |
|---|---|
{ $acos: NaN } | NaN |
{ $acos: null } | null |
{ $acos : Infinity} 或 { $acos : -Infinity} | 抛出异常: "errmsg" : "Failed to optimize pipeline :: caused by :: cannot apply $acos to -inf, value must in [-1,1]" |
举例
反余弦度数
trigonometry集合包含下满的文档,存储了直角三角形的3条边长:
{
"_id" : ObjectId("5c50782193f833234ba90d85"),
"side_a" : NumberDecimal("3"),
"side_b" : NumberDecimal("4"),
"hypotenuse" : NumberDecimal("5")
}
下面的聚合操作使用$acos表达式计算side_a相邻的角度,并将结果使用$addFields阶段将结果添加到输入文档。
db.trigonometry.aggregate([
{
$addFields : {
"angle_a" : {
$radiansToDegrees : {
$acos : {
$divide : [ "$side_b", "$hypotenuse" ]
}
}
}
}
}
])
$radiansToDegrees表达式将$acos返回的弧度转换为角度。
聚合后返回的结果如下:
{
"_id" : ObjectId("5c50782193f833234ba90d85"),
"side_a" : NumberDecimal("3"),
"side_b" : NumberDecimal("4"),
"hypotenuse" : NumberDecimal("5"),
"angle_a" : NumberDecimal("36.86989764584402129685561255909341")
}
因为side_b和hypotenuse存储为128-bit decimal所以$acos的输出也是128-bit decimal。










