文档菜单
文档首页
/
MongoDB 手册
/ / /

$pow(聚合)

本页

  • 定义
  • 行为
  • 示例
$pow

将一个数字提升到指定的指数并返回结果。$pow 语法如下

{ $pow: [ <number>, <exponent> ] }

<number> 表达式可以是任何有效的表达式,只要它解析为一个数字。

<exponent> 表达式可以是任何有效的 表达式,只要它解析为一个数字。

不能将 0 提升到负指数。

当输入类型混合时,$pow 将较小的输入类型提升为两个中较大的类型。一个类型被认为更大,当它代表更广泛的值范围时。数值类型从小到大的顺序是:整数 → 长整数 → 双精度浮点数 → 十进制数

输入类型的较大者还决定了结果类型,除非操作溢出且超出该较大数据类型所表示的范围。在溢出的情况下,$pow 根据以下顺序提升结果

  • 如果较大的输入类型是 整数,则结果类型提升为 长整数

  • 如果较大的输入类型是 长整数,则结果类型提升为 双精度浮点数

  • 如果较大的类型是 双精度浮点数十进制,则溢出结果表示为 + 或 - 无穷大。结果不会提升类型。

如果任一参数解析为 null 或引用一个缺失的字段,$pow 返回 null。如果任一参数解析为 NaN$pow 返回 NaN

示例
结果
{ $pow: [ 5, 0 ] }
1
{ $pow: [ 5, 2 ] }
25
{ $pow: [ 5, -2 ] }
0.04
{ $pow: [ -5, 0.5 ] }
NaN

创建一个名为 quizzes 的集合,以下是一些文档

db.quizzes.insertMany( [
{
_id : 1,
scores : [
{ name : "dave123", score : 85 },
{ name : "dave2", score : 90 },
{ name : "ahn", score : 71 }
]
},
{
_id : 2,
scores : [
{ name : "li", quiz : 2, score : 96 },
{ name : "annT", score : 77 },
{ name : "ty", score : 82 }
]
}
] )

以下示例计算每个测验的方差

db.quizzes.aggregate( [
{ $project: { variance: { $pow: [ { $stdDevPop: "$scores.score" }, 2 ] } } }
] )

该操作返回以下结果

{ _id : 1, variance : 64.66666666666667 }
{ _id : 2, variance : 64.66666666666667 }

返回

$percentile