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

MongoDB $ cos

Dans MongoDB, le $cos l'opérateur de pipeline d'agrégation renvoie le cosinus d'une valeur mesurée en radians.

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

Le $cos 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" : 3 }

Nous pouvons utiliser le $cos opérateur pour retourner le cosinus de la data champ :

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

Résultat :

{ "cosine" : -0.9899924966004454 }

Par défaut, le $cos l'opérateur renvoie les valeurs sous la forme d'un double , mais il peut également renvoyer des valeurs sous forme décimale de 128 bits tant que l'expression se résout en une valeur décimale de 128 bits.

Lorsque l'expression est en degrés

Comme mentionné, $cos accepte son expression en radians. Vous pouvez utiliser le $degreesToRadians opérateur pour convertir toutes les valeurs de degrés en radians.

Exemple :

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

Résultat :

{ "cosine" : -0.017278628635716543 }

Valeurs nulles

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

Supposons que nous ajoutions le document suivant à notre collection :

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

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

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

Résultat :

{ "cosine" : null }

Nous pouvons voir que le résultat est null .

Valeurs NaN

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

Exemple :

db.test.aggregate(
  [
    { $match: { _id: 3 } },
    { $project: { 
        _id: 0,
        cosine: { $cos: 1 * "string" }
      }
    }
  ]
)

Résultat :

{ "cosine" : NaN }

Dans ce cas, j'ai essayé 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 $cos l'opérateur renvoie une erreur.

Supposons que nous ajoutions le document suivant à notre collection :

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

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

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

Résultat :

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "cannot apply $cos 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

C'est l'erreur que j'obtiens dans le mongo coque.

Champs inexistants

Si le $cos 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,
        cosine: { $cos: "$carrots" }
      }
    }
  ]
)

Résultat :

{ "cosine" : null }

Décimal 128 bits

Comme mentionné, si l'expression fournie à $cos est décimal 128 bits, le résultat est renvoyé en décimal 128 bits.

Supposons que nous ajoutions le document suivant à la collection :

{ "_id" : 5, "data" : NumberDecimal("1.1301023541559787031443874490659") }

Voici ce qui se passe lorsque nous exécutons cela via le $cos opérateur :

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

Résultat :

{ "cosine" : NumberDecimal("0.4265672353490945266548815934449746") }

La sortie est décimale 128 bits.