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 }