本文主要是介绍MongoDB聚合操作符:$acos,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
$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
。
这篇关于MongoDB聚合操作符:$acos的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!