MongoDB聚合操作符:$acos

$acos操作符返回一个值的反余弦。从MongoDB4.2版本开始支持。

语法

js 复制代码
{ $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条边长:

json 复制代码
{
  "_id" : ObjectId("5c50782193f833234ba90d85"),
  "side_a" : NumberDecimal("3"),
  "side_b" : NumberDecimal("4"),
  "hypotenuse" : NumberDecimal("5")
}

下面的聚合操作使用$acos表达式计算side_a相邻的角度,并将结果使用$addFields阶段将结果添加到输入文档。

js 复制代码
db.trigonometry.aggregate([
  {
    $addFields : {
      "angle_a" : {
        $radiansToDegrees : {
          $acos : {
            $divide : [ "$side_b", "$hypotenuse" ]
          }
        }
      }
    }
  }
])

$radiansToDegrees表达式将$acos返回的弧度转换为角度。

聚合后返回的结果如下:

json 复制代码
{
  "_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。

相关推荐
这个DBA有点耶12 小时前
从症状到根因:数据库监控指标的分层方法与静态/动态阈值策略
数据库·mysql·代码规范
SelectDB12 小时前
时间旅行与快照能力速查:Doris 侧三条落地路径
大数据·数据库·数据分析
SelectDB12 小时前
云数仓成本结构拆解速查:五层计费 vs Doris / 托管形态
大数据·数据库·数据分析
SelectDB12 小时前
什么场景能承接与建议保留:Doris vs Snowflake 边界速查
大数据·数据库·数据分析
这个DBA有点耶14 小时前
DELETE没删多少数据,表却越来越大——InnoDB删除空洞与页合并失效的根因
数据库·mysql·代码规范
ly768917 小时前
PostgreSQL 备份恢复策略:pg_basebackup、WAL 归档与 PITR 在企业 Java 系统中的落地
java·数据库·postgresql·pitr·pg_basebackup·wal 归档
小羊没烦恼!18 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp
注塑机数据采集联网18 小时前
如何解决注塑机数据采集联网对接MES系统数据WiFi传输数据不稳问题
大数据·数据库·物联网·数据挖掘·数据分析
黄俊懿18 小时前
【架构师从入门到进阶】第六章:服务集群优化——第八节:线程数公式
java·服务器·数据库·分布式·性能优化·架构·系统架构