$sin聚合运算符用来计算正弦值,返回指定表达式以弧度为单位的正弦值。
{ $sin: <expression> }
为可被解析为数值的表达式$sin返回弧度,使用$radiansToDegrees运算符可以把弧度转换为角度$sin默认返回双精度数double,如果表达式解析为128-bit decimal则返回同样类型。如果参数解析为null或引用不存在的字段,则结果返回null;如果参数解析为NaN,返回NaN;如果参数为负无穷或正无穷,则会报错。如果如下表所示:
| 示例 | 结果 |
|---|---|
{ $sin: NaN } | NaN |
{ $sin: null } | null |
{ $sin: 正无穷 } | 报错 |
{ $sin: 负无穷 } | 报错 |
trigonometry集合中有下面的文档,包含了直角三角形的斜边和一个角:
{
"_id" : ObjectId("5c50782193f833234ba90d85"),
"angle_a" : NumberDecimal("53.13010235415597870314438744090659"),
"hypotenuse" : NumberDecimal("5")
}
下面的聚合操作使用$degreesToRadians运算符将angle_a转换为弧度,使用$sin表达式计算与角angle_a相邻的边的正弦值,最后使用$addFields管道阶段将其添加到输入文档。
db.trigonometry.aggregate([
{
$addFields : {
"side_b" : {
$multiply : [
{ $sin : {$degreesToRadians : "$angle_a"} },
"$hypotenuse"
]
}
}
}
])
执行的结果为:
{
"_id" : ObjectId("5c50782193f833234ba90d85"),
"angle_a" : NumberDecimal("53.13010235415597870314438744090659"),
"side_b" : NumberDecimal("4.000000000000000000000000000000000"),
"hypotenuse" : NumberDecimal("5"),
}
trigonometry集合中有下面的文档,包含了直角三角形的斜边和一个角:
{
"_id" : ObjectId("5c50782193f833234ba90d85"),
"angle_a" : NumberDecimal("0.9272952180016122324285124629224288"),
"hypotenuse" : NumberDecimal("5")
}
下面的聚合操作使用$sin表达式计算与角angle_a相邻的边,然后使用$addFields管道阶段将其添加到输入文档。
db.trigonometry.aggregate([
{
$addFields : {
"side_b" : {
$multiply : [
{ $sin : "$angle_a" },
"$hypotenuse"
]
}
}
}
])
结果为:
{
"_id" : ObjectId("5c50782193f833234ba90d85"),
"angle_a" : NumberDecimal("0.9272952180016122324285124629224288"),
"side_b" : NumberDecimal("3.000000000000000000000000000000000"),
"hypotenuse" : NumberDecimal("5"),
}