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 }