Dans MongoDB, le $degreesToRadians
l'opérateur de pipeline d'agrégation convertit une valeur d'entrée mesurée en degrés en radians.
$degreesToRadians
accepte toute expression valide qui se résout en un nombre.
Les $degreesToRadians
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" : 180 }
Et supposons que la valeur de data
le champ est en degrés (par conséquent, dans ce cas, il s'agit de 180
degrés).
Nous pouvons utiliser le $degreesToRadians
opérateur pour convertir les data
champ en radians :
db.test.aggregate(
[
{ $match: { _id: 1 } },
{ $project: {
_id: 0,
degrees: "$data",
radians: { $degreesToRadians: "$data" }
}
}
]
)
Résultat :
{ "degrees" : 180, "radians" : 3.141592653589793 }
Par défaut, le $degreesToRadians
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.
Valeurs décimales 128 bits
Si l'expression fournie à $degreesToRadians
est décimal 128 bits, le résultat est renvoyé en décimal 128 bits.
Supposons que nous ajoutions le document suivant à notre collection :
{ "_id" : 2, "data" : NumberDecimal("0.1301023541559787031443874490659") }
Exécutons le $degreesToRadians
opérateur sur ce document :
db.test.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
degrees: "$data",
radians: { $degreesToRadians: "$data" }
}
}
]
).pretty()
Résultat :
{ "degrees" : NumberDecimal("90.1301023541559787031443874490659"), "radians" : NumberDecimal("1.573067041239514175890278047405623") }
La sortie est décimale 128 bits.
Valeurs nulles
Les valeurs nulles renvoient null
lors de l'utilisation de $degreesToRadians
opérateur.
Supposons que nous ajoutions le document suivant à notre collection :
{ "_id" : 3, "data" : null }
Exécutons le $degreesToRadians
opérateur sur ce document :
db.test.aggregate(
[
{ $match: { _id: 3 } },
{ $project: {
_id: 0,
radians: { $degreesToRadians: "$data" }
}
}
]
)
Résultat :
{ "radians" : null }
Nous pouvons voir que le résultat est null
.
Valeurs NaN
Si l'argument se résout en NaN
, $degreesToRadians
renvoie NaN
.
Exemple :
db.test.aggregate(
[
{ $match: { _id: 3 } },
{ $project: {
_id: 0,
radians: { $degreesToRadians: 0 * "$data" }
}
}
]
)
Résultat :
{ "radians" : NaN }
Infini
Si l'argument se résout en Infinity
ou -Infinity
, le $degreesToRadians
l'opérateur renvoie Infinity
.
Supposons que nous ajoutions le document suivant à notre collection :
{ "_id" : 4, "data" : Infinity }
Lançons $degreesToRadians
contre le champ de données :
db.test.aggregate(
[
{ $match: { _id: 4 } },
{ $project: {
_id: 0,
radians: { $degreesToRadians: "$data" }
}
}
]
)
Résultat :
{ "radians" : Infinity }
Champs inexistants
Si le $degreesToRadians
l'opérateur est appliqué sur un champ qui n'existe pas, null
est renvoyé.
Exemple :
db.test.aggregate(
[
{ $match: { _id: 4 } },
{ $project: {
_id: 0,
radians: { $degreesToRadians: "$name" }
}
}
]
)
Résultat :
{ "radians" : null }
Combiné avec d'autres opérateurs
Certains opérateurs de pipeline d'agrégation acceptent leurs expressions en radians. Si un champ a sa valeur en degrés, vous pouvez combiner $degreesToRadians
pour convertir l'expression en radians.
Supposons que nous ayons une collection appelée test
avec le document suivant :
{ "_id" : 1, "data" : 3 }
Et dans ce cas, la valeur du champ de données est en degrés.
Supposons maintenant que nous voulions utiliser le $cosh
opérateur pour renvoyer le cosinus hyperbolique des data
domaine. Le seul problème est que le $cosh
l'opérateur accepte les expressions en radians.
Aucun problème! Nous pouvons utiliser $degreesToRadians
pour convertir l'expression d'entrée en radians.
Exemple :
db.test.aggregate(
[
{ $match: { _id: 1 } },
{ $project: {
_id: 0,
hyperbolicCosine: { $degreesToRadians: { $cosh: "$data" } }
}
}
]
)
Résultat :
{ "hyperbolicCosine" : 0.17571384980422547 }