MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB $abs


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 }