MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB $abs

Dans MongoDB, le $abs l'opérateur de pipeline d'agrégation renvoie la valeur absolue d'un nombre.

Exemple

Supposons que nous ayons une collection appelée data avec le document suivant :

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

Nous pouvons utiliser le $abs opérateur pour retourner les valeurs absolues du a et b champs.

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

Résultat :

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

Les valeurs absolues n'incluent aucun signe, et nous pouvons donc voir que le signe négatif a été supprimé du b valeur.

Vous pouvez considérer la valeur absolue d'un nombre comme étant la distance, sur la droite numérique, entre ce nombre et zéro.

Valeurs nulles

Les valeurs nulles renvoient null lors de l'utilisation de $abs opérateur.

Supposons que nous ajoutions le document suivant à notre collection :

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

Exécutons le $abs opérateur sur ce document :

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

Résultat :

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

Nous pouvons voir que b résolu à null .

Nous pouvons également voir que 0 se résout en 0 .

Valeurs NaN

Si l'argument se résout en NaN , $abs renvoie NaN .

Exemple :

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

Résultat :

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

Dans ce cas, j'ai essayé de multiplier un nombre par une chaîne, ce qui a donné NaN être retourné.

Champs inexistants

Si le $abs l'opérateur est appliqué sur un champ qui n'existe pas, null est renvoyé.

Exemple :

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

Résultat :

{ "c" : null }

Combiné avec d'autres opérateurs

Dans cet exemple, je combine $abs avec $subtract afin de calculer l'ampleur de la différence entre les champs a et b :

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

Résultat :

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