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

MongoDB $ cos

En MongoDB, el $cos El operador de tubería de agregación devuelve el coseno de un valor que se mide en radianes.

$cos acepta cualquier expresión válida que se resuelva en un número.

El $cos El operador se introdujo en MongoDB 4.2.

Ejemplo

Supongamos que tenemos una colección llamada test con el siguiente documento:

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

Podemos usar el $cos operador para devolver el coseno de los data campo:

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

Resultado:

{ "cosine" : -0.9899924966004454 }

Por defecto, el $cos operador devuelve valores como un 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.

Cuando la Expresión está en Grados

Como se mencionó, $cos acepta su expresión en radianes. Puede usar el $degreesToRadians operador para convertir cualquier valor de grados a radianes.

Ejemplo:

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

Resultado:

{ "cosine" : -0.017278628635716543 }

Valores nulos

Los valores nulos devuelven null cuando se usa $cos operador.

Supongamos que agregamos el siguiente documento a nuestra colección:

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

Ejecutemos el $cos operador contra ese documento:

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

Resultado:

{ "cosine" : null }

Podemos ver que el resultado es null .

Valores NaN

Si el argumento se resuelve en NaN , $cos devuelve NaN .

Ejemplo:

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

Resultado:

{ "cosine" : NaN }

En este caso, intenté multiplicar un número por una cadena, lo que resultó en NaN siendo devuelto.

Infinito

Si el argumento se resuelve en Infinity o -Infinity , el $cos operador devuelve un error.

Supongamos que agregamos el siguiente documento a nuestra colección:

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

Ejecutemos $cos contra el campo de datos:

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

Resultado:

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

Ese es el error que me sale en mongo concha.

Campos Inexistentes

Si el $cos el operador se aplica a un campo que no existe, null es devuelto.

Ejemplo:

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

Resultado:

{ "cosine" : null }

Decimal de 128 bits

Como se mencionó, si la expresión proporcionada a $cos es decimal de 128 bits, entonces el resultado se devuelve en decimal de 128 bits.

Supongamos que agregamos el siguiente documento a la colección:

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

Esto es lo que sucede cuando lo ejecutamos a través de $cos operador:

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

Resultado:

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

La salida es decimal de 128 bits.