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

MongoDB $tan

Dans MongoDB, le $tan L'opérateur de pipeline d'agrégation renvoie la tangente d'une valeur mesurée en radians.

$tan accepte toute expression valide qui se résout en un nombre.

Le $tan 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" : 2 }

Nous pouvons utiliser le $tan opérateur pour retourner la tangente de la data champ :

db.test.aggregate(
  [
    { $match: { _id: 1 } },
    { $project: { 
        _id: 0,
        tangent: { $tan: "$data" }
      }
    }
  ]
)

Résultat :

{ "tangent" : -2.185039863261519 }

Convertir en radians

Comme mentionné, $tan renvoie la tangente d'une valeur mesurée en radians. Si la valeur est en degrés, vous pouvez utiliser le $degreesToRadians opérateur pour le convertir en radians.

Exemple :

db.test.aggregate(
  [
    { $match: { _id: 1 } },
    { $project: { 
        _id: 0,
        tangent: { $degreesToRadians: { $tan: "$data" } }
      }
    }
  ]
)

Résultat :

{ "tangent" : -0.038136139901240186 }

Valeurs décimales 128 bits

Par défaut, le $tan 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.

Supposons que nous ajoutions le document suivant à notre collection :

{ "_id" : 2, "data" : NumberDecimal("2.1301023541559787031443874490659") }

Exécutons le $tan opérateur sur ce document :

db.test.aggregate(
  [
    { $match: { _id: 2 } },
    { $project: { 
        _id: 0,
        tangent: { $tan: "$data" }
      }
    }
  ]
)

Résultat :

{ "tangent" : NumberDecimal("-1.597486946407534452195921861435753") }

La sortie est décimale 128 bits.

Valeurs nulles

Les valeurs nulles renvoient null lors de l'utilisation du $tan opérateur.

Supposons que nous ajoutions le document suivant à notre collection :

{ "_id" : 3, "data" : null }

Exécutons le $tan opérateur sur ce document :

db.test.aggregate(
  [
    { $match: { _id: 3 } },
    { $project: { 
        _id: 0,
        result: { $tan: "$data" }
      }
    }
  ]
)

Résultat :

{ "result" : null }

Nous pouvons voir que le résultat est null .

Valeurs NaN

Si l'argument se résout en NaN$tan renvoie NaN .

Exemple :

db.test.aggregate(
  [
    { $match: { _id: 1 } },
    { $project: { 
        _id: 0,
        result: { $tan: 1 * "$data" }
      }
    }
  ]
)

Résultat :

{ "result" : NaN }

Champs inexistants

Si le $tan l'opérateur est appliqué sur un champ qui n'existe pas, null est renvoyé.

Exemple :

db.test.aggregate(
  [
    { $match: { _id: 1 } },
    { $project: { 
        _id: 0,
        result: { $tan: "$name" }
      }
    }
  ]
)

Résultat :

{ "result" : null }

Infini

Fournir Infinity ou -Infinity renvoie une erreur.

Supposons que nous ajoutions les documents suivants à la collection :

{ "_id" : 4, "data" : Infinity }
{ "_id" : 5, "data" : -Infinity }

Appliquons $tan à ces documents :

db.test.aggregate(
  [
    { $match: { _id: { $in: [ 4, 5 ] } } },
    { $project: { 
        tangent: { $tan: "$data" }
      }
    }
  ]
)

Résultat :

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "cannot apply $tan to inf, value must in (-inf,inf)",
	"code" : 50989,
	"codeName" : "Location50989"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:618:17
[email protected]/mongo/shell/assert.js:708:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1046:12
@(shell):1:1

Dans ce cas, $tan n'est arrivé qu'au premier document (document 4) avant qu'une erreur ne se produise. Nous le savons car le message d'erreur indique qu'il essayait d'appliquer $tan en inf (Infinity ).

Si nous supprimons le document 4 du filtre de requête, nous pouvons voir qu'il progresse vers le document 5 et renvoie la même erreur.

db.test.aggregate(
  [
    { $match: { _id: { $in: [ 5 ] } } },
    { $project: { 
        tangent: { $tan: "$data" }
      }
    }
  ]
)

Résultat :

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "cannot apply $tan to -inf, value must in (-inf,inf)",
	"code" : 50989,
	"codeName" : "Location50989"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:618:17
[email protected]/mongo/shell/assert.js:708:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1046:12
@(shell):1:1

Cette fois, l'erreur montre qu'il essayait d'appliquer $tan en -inf (-Infinity ).