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

MongoDB $asin

Dans MongoDB, le $asin L'opérateur de pipeline d'agrégation renvoie l'arcsinus (sinus inverse) d'une valeur, mesurée en radians.

$asin accepte toute expression valide qui se résout en un nombre compris entre -1 et 1 .

Le $asin 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" : 0.5 }

Nous pouvons utiliser le $asin opérateur pour renvoyer l'arccosinus de la data champ :

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

Résultat :

{ "arcsine" : 0.5235987755982988 }

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

Convertir en degrés

Comme mentionné, $asin renvoie son résultat en radians. Vous pouvez utiliser le $radiansToDegrees opérateur si vous voulez le résultat en degrés.

Exemple :

db.test.aggregate(
  [
    { $match: { _id: 1 } },
    { $project: { 
        _id: 0,
        radians: { $asin: "$data" },
        degrees: { $radiansToDegrees: { $asin: "$data" } }
      }
    }
  ]
)

Résultat :

{ "radians" : 0.5235987755982988, "degrees" : 29.999999999999996 }

Dans cet exemple, le premier champ présente le résultat en radians et le second le présente en degrés.

Valeurs décimales 128 bits

Si l'expression fournie à $asin 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 $asin opérateur sur ce document :

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

Résultat :

{ "arcsine" : NumberDecimal("0.1304722105697547116336288178856500") }

La sortie est décimale 128 bits.

Valeurs nulles

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

Supposons que nous ajoutions le document suivant à notre collection :

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

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

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

Résultat :

{ "arcsine" : null }

Nous pouvons voir que le résultat est null .

Valeurs NaN

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

Exemple :

db.test.aggregate(
  [
    { $match: { _id: 3 } },
    { $project: { 
        _id: 0,
        arcsine: { $asin: 1 * "String" }
      }
    }
  ]
)

Résultat :

{ "arcsine" : NaN }

Dans ce cas, l'expression a tenté de multiplier un nombre par une chaîne, ce qui a donné NaN être retourné.

Infini

Si l'argument se résout en Infinity ou -Infinity , le $asin l'opérateur renvoie une erreur.

Supposons que nous ajoutions le document suivant à notre collection :

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

Lançons $asin contre le champ de données :

db.test.aggregate(
  [
    { $match: { _id: 4 } },
    { $project: { 
        _id: 0,
        arcsine: { $asin: "$data" }
      }
    }
  ]
)

Résultat :

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "cannot apply $asin to inf, value must in [-1,1]",
	"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

C'est l'erreur que j'obtiens dans le mongo shell lors de l'exécution de ce code.

Champs inexistants

Si le $asin 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,
        arcsine: { $asin: "$wrong" }
      }
    }
  ]
)

Résultat :

{ "arcsine" : null }

Valeurs hors plage

Fournir une valeur hors plage à $asin entraînera une erreur. Nous avons déjà vu ce qui se passe lorsque nous fournissons Infinity à $asin . Utilisons maintenant une valeur plus terre à terre, comme, par exemple, 2 .

Supposons que nous ajoutions le document suivant à la collection :

{ "_id" : 5, "data" : 2 }

Exécutons maintenant $asin par rapport aux data champ :

db.test.aggregate(
  [
    { $match: { _id: 5 } },
    { $project: { 
        _id: 0,
        arcsine: { $asin: "$data" }
      }
    }
  ]
)

Résultat :

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "cannot apply $asin to 2, value must in [-1,1]",
	"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

Comme l'indique le message d'erreur, la valeur doit être comprise entre -1 et 1 .