sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB $ abs

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 }