MongoDB聚合运算符:$atan2

$atan2用来计算反正切,返回指定表达式的反正切值,与$antan的区别主要是参数不同。

语法

js 复制代码
{ $atan2: [<expression1>, <expression1>] }
  • <expression>为可被解析为数值的表达式
  • $atan2返回弧度,使用$radiansToDegrees运算符可以把弧度转换为角度
  • $atan2默认返回双精度数double,如果表达式<expression>解析为128-bit decimal则返回同样类型。

使用

如果任一参数解析为null,则结果返回null;如果任一参数解析为NaN,则结果返回NaN;如果一个参数解析为null,另一个解析为NaN,则结果返回null,如下表所示:

示例 结果
{ $atan2: [NaN, <value>} NaN
{ $atan2: [ <value>, NaN ] } NaN
{ $atan2: [ null, <value> ] } null
{ $atan2: [ <value>, null ] } null
{ $atan2: [ NaN, null ] } null
{ $atan2: [ null, NaN ] } null

举例

trigonometry集合中有下面的文档,包含了直角三角形的三条边:

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

反正切角度

下面的聚合操作使用$atan2表达式计算与边side_a相邻的角度,然后使用$radiansToDegrees运算符将结果转换为度数,最后使用$addFields管道阶段将其添加到输入文档。

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

执行的结果为:

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

反正切弧度

与上例不同,在求反正切后,没有进行度数的转换,结果为弧度:

js 复制代码
db.trigonometry.aggregate([
  {
    $addFields : {
      "angle_a" : {
        $atan2 : [ "$side_b", "$side_a" ]
      }
    }
  }
])

结果为:

json 复制代码
{
  "_id" : ObjectId("5c50782193f833234ba90d85"),
  "side_a" : NumberDecimal("3"),
  "side_b" : NumberDecimal("4"),
  "hypotenuse" : NumberDecimal("5"),
  "angle_a" : NumberDecimal("0.9272952180016122324285124629224287")
}
相关推荐
热爱编程的小曾26 分钟前
sqli-labs靶场 less 8
前端·数据库·less
THRUSTER1111135 分钟前
MySQL-- 函数(单行函数):数值函数, 字符串函数
数据库·mysql·函数·navicat·单行函数
橙序研工坊41 分钟前
MySQL的进阶语法7(索引-B+Tree 、Hash、聚集索引 、二级索引(回表查询)、索引的使用及设计原则
数据库·sql·mysql
Bruce-li__42 分钟前
深入理解Python asyncio:从入门到实战,掌握异步编程精髓
网络·数据库·python
小光学长1 小时前
基于vue框架的智能服务旅游管理系统54kd3(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库
Bonnie_12151 小时前
07-MySQL-事务的隔离级别以及底层原理
数据库·mysql
ETLCloud数据集成社区1 小时前
ETLCloud是如何通过Oracle实现CDC的?
数据库·oracle·etl·实时数据同步
可待电子单片机设计定制(论文)2 小时前
【STM32设计】数控直流稳压电源的设计与实现(实物+资料+论文)
stm32·嵌入式硬件·mongodb
KATA~2 小时前
解决MyBatis-Plus枚举映射错误:No enum constant问题
java·数据库·mybatis
xyliiiiiL2 小时前
一文总结常见项目排查
java·服务器·数据库