En MongoDB, el $degreesToRadians
El operador de tubería de agregación convierte un valor de entrada medido en grados a radianes.
$degreesToRadians
acepta cualquier expresión válida que se resuelva en un número.
Los $degreesToRadians
El operador se introdujo en MongoDB 4.2.
Ejemplo
Supongamos que tenemos una colección llamada test
con el siguiente documento:
{ "_id" : 1, "data" : 180 }
Y supongamos que el valor de los data
el campo está en grados (por lo tanto, en este caso es 180
grados).
Podemos usar el $degreesToRadians
operador para convertir los data
campo a radianes:
db.test.aggregate(
[
{ $match: { _id: 1 } },
{ $project: {
_id: 0,
degrees: "$data",
radians: { $degreesToRadians: "$data" }
}
}
]
)
Resultado:
{ "degrees" : 180, "radians" : 3.141592653589793 }
De forma predeterminada, $degreesToRadians
el operador devuelve valores como double
, pero también puede devolver valores como un decimal de 128 bits siempre que la expresión se resuelva en un valor decimal de 128 bits.
Valores decimales de 128 bits
Si la expresión proporcionada a $degreesToRadians
es decimal de 128 bits, entonces el resultado se devuelve en decimal de 128 bits.
Supongamos que agregamos el siguiente documento a nuestra colección:
{ "_id" : 2, "data" : NumberDecimal("0.1301023541559787031443874490659") }
Ejecutemos el $degreesToRadians
operador contra ese documento:
db.test.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
degrees: "$data",
radians: { $degreesToRadians: "$data" }
}
}
]
).pretty()
Resultado:
{ "degrees" : NumberDecimal("90.1301023541559787031443874490659"), "radians" : NumberDecimal("1.573067041239514175890278047405623") }
La salida es decimal de 128 bits.
Valores nulos
Los valores nulos devuelven null
cuando se usa $degreesToRadians
operador.
Supongamos que agregamos el siguiente documento a nuestra colección:
{ "_id" : 3, "data" : null }
Ejecutemos el $degreesToRadians
operador contra ese documento:
db.test.aggregate(
[
{ $match: { _id: 3 } },
{ $project: {
_id: 0,
radians: { $degreesToRadians: "$data" }
}
}
]
)
Resultado:
{ "radians" : null }
Podemos ver que el resultado es null
.
Valores NaN
Si el argumento se resuelve en NaN
, $degreesToRadians
devuelve NaN
.
Ejemplo:
db.test.aggregate(
[
{ $match: { _id: 3 } },
{ $project: {
_id: 0,
radians: { $degreesToRadians: 0 * "$data" }
}
}
]
)
Resultado:
{ "radians" : NaN }
Infinito
Si el argumento se resuelve en Infinity
o -Infinity
, el $degreesToRadians
el operador devuelve Infinity
.
Supongamos que agregamos el siguiente documento a nuestra colección:
{ "_id" : 4, "data" : Infinity }
Ejecutemos $degreesToRadians
contra el campo de datos:
db.test.aggregate(
[
{ $match: { _id: 4 } },
{ $project: {
_id: 0,
radians: { $degreesToRadians: "$data" }
}
}
]
)
Resultado:
{ "radians" : Infinity }
Campos Inexistentes
Si el $degreesToRadians
el operador se aplica a un campo que no existe, null
es devuelto.
Ejemplo:
db.test.aggregate(
[
{ $match: { _id: 4 } },
{ $project: {
_id: 0,
radians: { $degreesToRadians: "$name" }
}
}
]
)
Resultado:
{ "radians" : null }
Combinado con otros operadores
Algunos operadores de tubería de agregación aceptan sus expresiones en radianes. Si un campo tiene su valor en grados, puede combinar $degreesToRadians
para convertir la expresión a radianes.
Supongamos que tenemos una colección llamada test
con el siguiente documento:
{ "_id" : 1, "data" : 3 }
Y en este caso, el valor del campo de datos está en grados.
Ahora supongamos que queremos usar el $cosh
operador para devolver el coseno hiperbólico de los data
campo. El único problema es que el $cosh
operador acepta expresiones en radianes.
¡No hay problema! Podemos usar $degreesToRadians
para convertir la expresión de entrada a radianes.
Ejemplo:
db.test.aggregate(
[
{ $match: { _id: 1 } },
{ $project: {
_id: 0,
hyperbolicCosine: { $degreesToRadians: { $cosh: "$data" } }
}
}
]
)
Resultado:
{ "hyperbolicCosine" : 0.17571384980422547 }