sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB $grados a radianes

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 }