MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB $degreesToRadians

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 }