$pow (agregação)
Nesta página
Definição
$pow
Cria um número para o expoente especificado e retorna o resultado.
$pow
tem a seguinte sintaxe:{ $pow: [ <number>, <exponent> ] } A expressão
<number>
pode ser qualquerexpressão válida, desde que seja resolvida como um número.A expressão
<exponent>
pode ser qualquer expressão válida, desde que seja resolvida como um número.Você não pode elevar
0
a um expoente negativo.
Comportamento
Quando os tipos de entrada são misturados, $pow
promove o tipo de entrada menor para o maior dos dois. Um tipo é considerado maior quando representa uma faixa mais ampla de valores. A ordem dos tipos numéricos do menor para o maior é: inteiro → longo → double → decimal
O maior dos tipos de entrada também determina o tipo de resultado, a menos que a operação se exceda e esteja além da faixa representada por esse tipo de dados maior. Em casos de excesso, $pow
promove o resultado de acordo com a seguinte ordem:
Se o tipo de entrada maior for
integer
, o tipo de resultado será promovido paralong
.Se o tipo de entrada maior for
long
, o tipo de resultado será promovido paradouble
.Se o tipo maior for
double
oudecimal
, o resultado do excesso será representado como + ou - infinito. Não há nenhum tipo de promoção do resultado.
Se qualquer um dos argumentos for resolvido para um valor de null
ou se referir a um campo ausente, $pow
retornará null
. Se qualquer um dos argumentos se resolver em NaN
, $pow
retornará NaN
.
Exemplo | Resultados |
---|---|
|
|
|
|
|
|
|
|
Exemplo
Crie uma coleção chamada quizzes
com os seguintes documentos:
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 } ] } ] )
O exemplo a seguir calcula a variância de cada questionário:
db.quizzes.aggregate( [ { $project: { variance: { $pow: [ { $stdDevPop: "$scores.score" }, 2 ] } } } ] )
A operação retorna os seguintes resultados:
{ _id : 1, variance : 64.66666666666667 } { _id : 2, variance : 64.66666666666667 }