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 }