Dans MongoDB, le $atanh l'opérateur de pipeline d'agrégation renvoie l'arctangente hyperbolique (tangente hyperbolique inverse) d'une valeur.
La valeur de retour est en radians.
$atanh accepte toute expression valide qui se résout en un nombre entre -1 et 1 .
Le $atanh L'opérateur a été introduit dans MongoDB 4.2.
Exemple
Supposons que nous ayons une collection appelée test avec le document suivant :
{ "_id" : 1, "data" : 0.5 }
Nous pouvons utiliser le $atanh opérateur pour renvoyer l'arc tangente hyperbolique de la data champ :
db.test.aggregate(
[
{ $match: { _id: 1 } },
{ $project: {
_id: 0,
hyperbolicArctangent: { $atanh: "$data" }
}
}
]
) Résultat :
{ "hyperbolicArctangent" : 0.5493061443340549 } Convertir en degrés
Comme mentionné, $atanh renvoie son résultat en radians. Vous pouvez utiliser le $radiansToDegrees opérateur si vous voulez le résultat en degrés.
Exemple :
db.test.aggregate(
[
{ $match: { _id: 1 } },
{ $project: {
_id: 0,
radians: { $atanh: "$data" },
degrees: { $radiansToDegrees: { $atanh: "$data" } }
}
}
]
) Résultat :
{ "radians" : 0.5493061443340549, "degrees" : 31.472923730945382 } Dans cet exemple, le premier champ présente le résultat en radians et le second le présente en degrés.
Valeurs décimales 128 bits
Par défaut, le $atanh l'opérateur renvoie les valeurs sous la forme d'un double , mais il peut également renvoyer des valeurs sous la forme d'un décimal de 128 bits tant que l'expression se résout en une valeur décimale de 128 bits.
Supposons que nous ajoutions le document suivant à notre collection :
{ "_id" : 2, "data" : NumberDecimal("0.1301023541559787031443874490659") }
Lançons le $atanh opérateur sur ce document :
db.test.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
result: { $atanh: "$data" }
}
}
]
) Résultat :
{ "result" : NumberDecimal("0.1308439651155512740523796431117568") } La sortie est décimale 128 bits.
Valeurs hors plage
Le $atanh l'opérateur accepte toute expression valide qui se résout en un nombre entre -1 et 1 . Les valeurs en dehors de cette plage entraîneront une erreur.
Supposons que nous ajoutions le document suivant à notre collection :
{ "_id" : 3, "data" : 2 }
Lançons le $atanh opérateur sur ce document :
db.test.aggregate(
[
{ $match: { _id: 3 } },
{ $project: {
_id: 0,
result: { $atanh: "$data" }
}
}
]
) Résultat :
uncaught exception: Error: command failed: {
"ok" : 0,
"errmsg" : "cannot apply $atanh to 2, value must in [-1,1]",
"code" : 50989,
"codeName" : "Location50989"
} : aggregate failed :
example@sqldat.com/mongo/shell/utils.js:25:13
example@sqldat.com/mongo/shell/assert.js:18:14
example@sqldat.com/mongo/shell/assert.js:618:17
example@sqldat.com/mongo/shell/assert.js:708:16
example@sqldat.com/mongo/shell/db.js:266:5
example@sqldat.com/mongo/shell/collection.js:1046:12
@(shell):1:1 Valeurs nulles
Les valeurs nulles renvoient null lors de l'utilisation du $atanh opérateur.
Supposons que nous ajoutions le document suivant à notre collection :
{ "_id" : 4, "data" : null }
Lançons le $atanh opérateur sur ce document :
db.test.aggregate(
[
{ $match: { _id: 4 } },
{ $project: {
_id: 0,
result: { $atanh: "$data" }
}
}
]
) Résultat :
{ "result" : null }
Nous pouvons voir que le résultat est null .
Valeurs NaN
Si l'argument se résout en NaN , $atanh renvoie NaN .
Exemple :
db.test.aggregate(
[
{ $match: { _id: 1 } },
{ $project: {
_id: 0,
result: { $atanh: 1 * "$data" }
}
}
]
) Résultat :
{ "result" : NaN } Champs inexistants
Si le $atanh l'opérateur est appliqué sur un champ qui n'existe pas, null est renvoyé.
Exemple :
db.test.aggregate(
[
{ $match: { _id: 1 } },
{ $project: {
_id: 0,
result: { $atanh: "$name" }
}
}
]
) Résultat :
{ "result" : null } Infini
Fournir Infinity ou -Infinity renverra une erreur hors plage (comme nous l'avons vu précédemment).
Supposons que nous ajoutions le document suivant à la collection :
{ "_id" : 5, "data" : Infinity }
Lançons $atanh encore :
db.test.aggregate(
[
{ $match: { _id: 5 } },
{ $project: {
_id: 0,
result: { $atanh: "$data" }
}
}
]
) Résultat :
uncaught exception: Error: command failed: {
"ok" : 0,
"errmsg" : "cannot apply $atanh to inf, value must in [-1,1]",
"code" : 50989,
"codeName" : "Location50989"
} : aggregate failed :
example@sqldat.com/mongo/shell/utils.js:25:13
example@sqldat.com/mongo/shell/assert.js:18:14
example@sqldat.com/mongo/shell/assert.js:618:17
example@sqldat.com/mongo/shell/assert.js:708:16
example@sqldat.com/mongo/shell/db.js:266:5
example@sqldat.com/mongo/shell/collection.js:1046:12
@(shell):1:1