En MongoDB, el $abs
El operador de tubería de agregación devuelve el valor absoluto de un número.
Ejemplo
Supongamos que tenemos una colección llamada data
con el siguiente documento:
{ "_id" : 1, "a" : 20, "b" : -20 }
Podemos usar el $abs
operador para devolver los valores absolutos de a
y b
campos.
db.data.aggregate(
[
{ $project: {
_id: 0,
a: { $abs: [ "$a" ] },
b: { $abs: [ "$b" ] }
}
}
]
)
Resultado:
{ "a" : 20, "b" : 20 }
Los valores absolutos no incluyen ningún signo, por lo que podemos ver que el signo negativo se eliminó del b
valor.
Puedes pensar en un valor absoluto de un número como la distancia, en la recta numérica, de ese número desde cero.
Valores nulos
Los valores nulos devuelven null
al usar el $abs
operador.
Supongamos que agregamos el siguiente documento a nuestra colección:
{ "_id" : 2, "a" : 0, "b" : null }
Ejecutemos el $abs
operador contra ese 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
resuelto a null
.
También podemos ver que 0
se resuelve en 0
.
Valores NaN
Si el argumento se resuelve en NaN
, $abs
devuelve NaN
.
Ejemplo:
db.data.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
a: { $abs: [ "$a" ] },
b: { $abs: [ 1 * "g" ] }
}
}
]
)
Resultado:
{ "a" : 0, "b" : NaN }
En este caso, intenté multiplicar un número por una cadena, lo que resultó en NaN
siendo devuelto.
Campos Inexistentes
Si el $abs
el operador se aplica a un campo que no existe, null
es devuelto.
Ejemplo:
db.data.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
c: { $abs: [ "$c" ] }
}
}
]
)
Resultado:
{ "c" : null }
Combinado con otros operadores
En este ejemplo combino $abs
con $subtract
para calcular la magnitud de la diferencia entre los campos a
y 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 }