No MongoDB, o
$abs
operador de pipeline de agregação retorna o valor absoluto de um número. Exemplo
Suponha que tenhamos uma coleção chamada
data
com o seguinte documento:{ "_id" : 1, "a" : 20, "b" : -20 }
Podemos usar o
$abs
operador para retornar os valores absolutos do a
e b
Campos. db.data.aggregate(
[
{ $project: {
_id: 0,
a: { $abs: [ "$a" ] },
b: { $abs: [ "$b" ] }
}
}
]
)
Resultado:
{ "a" : 20, "b" : 20 }
Os valores absolutos não incluem nenhum sinal e, portanto, podemos ver que o sinal negativo foi removido do
b
valor. Você pode pensar em um valor absoluto de um número como sendo a distância, na reta numérica, desse número a partir do zero.
Valores nulos
Valores nulos retornam
null
ao usar o $abs
operador. Suponha que adicionamos o seguinte documento à nossa coleção:
{ "_id" : 2, "a" : 0, "b" : null }
Vamos executar o
$abs
operador contra esse documento:db.data.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
a: { $abs: [ "$a" ] },
b: { $abs: [ "$b" ] }
}
}
]
)
Resultado:
{ "a" : 0, "b" : null }
Podemos ver que
b
resolvido para null
. Também podemos ver que
0
resolve para 0
. Valores NaN
Se o argumento resolver para
NaN
, $abs
retorna NaN
. Exemplo:
db.data.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
a: { $abs: [ "$a" ] },
b: { $abs: [ 1 * "g" ] }
}
}
]
)
Resultado:
{ "a" : 0, "b" : NaN }
Nesse caso, tentei multiplicar um número por uma string, o que resultou em
NaN
sendo devolvido. Campos inexistentes
Se o
$abs
operador é aplicado em um campo que não existe, null
é devolvido. Exemplo:
db.data.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
c: { $abs: [ "$c" ] }
}
}
]
)
Resultado:
{ "c" : null }
Combinado com outros operadores
Neste exemplo eu combino
$abs
com $subtract
para calcular a magnitude da diferença entre os campos a
e b
:db.data.aggregate(
[
{ $match: { _id: 1 } },
{ $project: {
_id: 0,
a: 1,
b: 1,
result: {
$abs: {
$subtract: [ "$a", "$b" ]
}
}
}
}
]
)
Resultado:
{ "a" : 20, "b" : -20, "result" : 40 }