MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB $ ass

In MongoDB, il $abs l'operatore della pipeline di aggregazione restituisce il valore assoluto di un numero.

Esempio

Supponiamo di avere una raccolta chiamata data con il seguente documento:

{ "_id" : 1, "a" : 20, "b" : -20 }

Possiamo usare il $abs per restituire i valori assoluti di a e b campi.

db.data.aggregate(
  [
    { $project: { 
        _id: 0,
        a: { $abs: [ "$a" ] },
        b: { $abs: [ "$b" ] }
      }
    }
  ]
)

Risultato:

{ "a" : 20, "b" : 20 }

I valori assoluti non hanno segni di inclusione, quindi possiamo vedere che il segno negativo è stato rimosso dal b valore.

Puoi pensare a un valore assoluto di un numero come alla distanza, sulla linea dei numeri, di quel numero da zero.

Valori Nulli

I valori Null restituiscono null quando si utilizza $abs operatore.

Supponiamo di aggiungere il seguente documento alla nostra raccolta:

{ "_id" : 2, "a" : 0, "b" : null }

Eseguiamo il $abs operatore contro quel documento:

db.data.aggregate(
  [
    { $match: { _id: 2 } },
    { $project: { 
        _id: 0,
        a: { $abs: [ "$a" ] },
        b: { $abs: [ "$b" ] }
      }
    }
  ]
)

Risultato:

{ "a" : 0, "b" : null }

Possiamo vedere che b risolto in null .

Possiamo anche vedere che 0 si risolve in 0 .

Valori NaN

Se l'argomento si risolve in NaN , $abs restituisce NaN .

Esempio:

db.data.aggregate(
  [
    { $match: { _id: 2 } },
    { $project: { 
        _id: 0,
        a: { $abs: [ "$a" ] },
        b: { $abs: [ 1 * "g" ] }
      }
    }
  ]
)

Risultato:

{ "a" : 0, "b" : NaN }

In questo caso ho provato a moltiplicare un numero per una stringa, ottenendo NaN in fase di restituzione.

Campi inesistenti

Se il $abs operatore viene applicato a un campo che non esiste, null viene restituito.

Esempio:

db.data.aggregate(
  [
    { $match: { _id: 2 } },
    { $project: { 
        _id: 0,
        c: { $abs: [ "$c" ] }
      }
    }
  ]
)

Risultato:

{ "c" : null }

Combinato con altri operatori

In questo esempio combino $abs con $subtract per calcolare l'entità della differenza tra i campi a e b :

db.data.aggregate(
  [
    { $match: { _id: 1 } },
    { $project: { 
        _id: 0,
        a: 1,
        b: 1,
        result: { 
          $abs: { 
            $subtract: [ "$a", "$b" ] 
            }
        }
      }
    }
  ]
)

Risultato:

{ "a" : 20, "b" : -20, "result" : 40 }