Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

$stdDevSamp (operador de acumulación)

$stdDevSamp

Modificado en la versión 5.0.

Calcula la desviación estándar de la muestra de los valores de entrada. Utilice esto si los valores abarcan una muestra de una población de datos a partir de la cual generalizar sobre la población. $stdDevSamp ignores non-numeric values.

Si los valores representan toda la población de datos o no deseas generalizar sobre una población más grande, utiliza $stdDevPop en su lugar.

$stdDevSamp está disponible en estas etapas:

Cuando se usa en las etapas $bucket, $bucketAuto, $group y $setWindowFields, $stdDevSamp tiene esta sintaxis:

{ $stdDevSamp: <expression> }

Cuando se utiliza en otras etapas compatibles, $stdDevSamp tiene una de dos sintaxis:

  • $stdDevSamp tiene una expresión especificada como su operando:

    { $stdDevSamp: <expression> }
  • $stdDevSamp tiene una lista de expresiones especificadas como su operando:

    { $stdDevSamp: [ <expression1>, <expression2> ... ] }

El argumento de $stdDevSamp puede ser cualquier expresión siempre que se resuelva en un arreglo.

Para obtener más información sobre las expresiones, consulta Expresiones.

$stdDevSamp devuelve la desviación estándar muestral de los valores de entrada como un double.

$stdDevSamp ignora los valores no numéricos. Si todos los operandos de una suma son no numéricos, $stdDevSamp devuelve null.

Si la muestra consta de un solo valor numérico, $stdDevSamp devuelve null.

En las etapas $group y $setWindowFields, si la expresión se resuelve en un arreglo, $stdDevSamp trata el operando como un valor no numérico.

En las otras etapas admitidas:

  • Con una única expresión como operando, si la expresión se resuelve en un arreglo, $stdDevSamp recorre el arreglo para operar sobre sus elementos numéricos y devolver un único valor.

  • Con una lista de expresiones como su operando, si alguna de las expresiones se resuelve en un arreglo, $stdDevSamp no recorre el arreglo sino que lo trata como un valor no numérico.

Comportamiento con valores en una $setWindowFields etapa ventana:

  • Ignora los valores no numéricos, valores null y los campos faltantes en una ventana.

  • Si la ventana está vacía, devuelve null.

  • Si la ventana contiene un valor de NaN, devuelve null.

  • Si la ventana contiene Infinity valores, retorna null.

  • Si ninguno de los puntos anteriores aplica, devuelve un valor de double.

Una colección users contiene documentos con los siguientes campos:

db.users.insertMany( [
{ _id: 0, username: "user0", age: 20 },
{ _id: 1, username: "user1", age: 42 },
{ _id: 2, username: "user2", age: 28 }
] )

Para calcular la desviación estándar de una muestra de usuarios, la siguiente operación de agregación utiliza primero el pipeline $sample para muestrear a 100 usuarios y luego utiliza $stdDevSamp para calcular la desviación estándar de los usuarios muestreados.

db.users.aggregate(
[
{ $sample: { size: 100 } },
{ $group: { _id: null, ageStdDev: { $stdDevSamp: "$age" } } }
]
)

La operación devuelve un resultado como el siguiente:

{ _id: null, ageStdDev: 7.811258386185771 }

Nuevo en la versión 5.0.

Crea una colección de cakeSales que incluya ventas de pasteles en el estado de California (CA) y Washington (WA):

db.cakeSales.insertMany( [
{ _id: 0, type: "chocolate", orderDate: new Date("2020-05-18T14:10:30Z"),
state: "CA", price: 13, quantity: 120 },
{ _id: 1, type: "chocolate", orderDate: new Date("2021-03-20T11:30:05Z"),
state: "WA", price: 14, quantity: 140 },
{ _id: 2, type: "vanilla", orderDate: new Date("2021-01-11T06:31:15Z"),
state: "CA", price: 12, quantity: 145 },
{ _id: 3, type: "vanilla", orderDate: new Date("2020-02-08T13:13:23Z"),
state: "WA", price: 13, quantity: 104 },
{ _id: 4, type: "strawberry", orderDate: new Date("2019-05-18T16:09:01Z"),
state: "CA", price: 41, quantity: 162 },
{ _id: 5, type: "strawberry", orderDate: new Date("2019-01-08T06:12:03Z"),
state: "WA", price: 43, quantity: 134 }
] )

Este ejemplo usa $stdDevSamp en el $setWindowFields para obtener la desviación estándar de muestra de los valores quantity de las ventas de pasteles para cada state:

db.cakeSales.aggregate( [
{
$setWindowFields: {
partitionBy: "$state",
sortBy: { orderDate: 1 },
output: {
stdDevSampQuantityForState: {
$stdDevSamp: "$quantity",
window: {
documents: [ "unbounded", "current" ]
}
}
}
}
}
] )

En el ejemplo:

  • partitionBy: "$state" particiona los documentos de la colección en state. Existen particiones para CA y WA.

  • sortBy: { orderDate: 1 } ordena los documentos de cada partición por orderDate en orden ascendente (1), de modo que el orderDate más antiguo sea el primero.

  • output establece el campo stdDevSampQuantityForState a la desviación estándar muestral de los valores quantity utilizando $stdDevSamp que se ejecuta en una ventana de documentos.

    La ventana contiene documentos entre un unbounded límite inferior y el current documento en el resultado. Esto significa que $stdDevSamp devuelve la desviación estándar de la muestra de los valores quantity para los documentos entre el principio de la partición y el documento actual.

En esta salida, se muestra el valor quantity de la desviación estándar de la muestra para CA y WA en el campo stdDevSampQuantityForState:

{ _id: 4, type: "strawberry", orderDate: ISODate("2019-05-18T16:09:01Z"),
state: "CA", price: 41, quantity: 162, stdDevSampQuantityForState: null }
{ _id: 0, type: "chocolate", orderDate: ISODate("2020-05-18T14:10:30Z"),
state: "CA", price: 13, quantity: 120, stdDevSampQuantityForState: 29.698484809834994 }
{ _id: 2, type: "vanilla", orderDate: ISODate("2021-01-11T06:31:15Z"),
state: "CA", price: 12, quantity: 145, stdDevSampQuantityForState: 21.1266025033211 }
{ _id: 5, type: "strawberry", orderDate: ISODate("2019-01-08T06:12:03Z"),
state: "WA", price: 43, quantity: 134, stdDevSampQuantityForState: null }
{ _id: 3, type: "vanilla", orderDate: ISODate("2020-02-08T13:13:23Z"),
state: "WA", price: 13, quantity: 104, stdDevSampQuantityForState: 21.213203435596427 }
{ _id: 1, type: "chocolate", orderDate: ISODate("2021-03-20T11:30:05Z"),
state: "WA", price: 14, quantity: 140, stdDevSampQuantityForState: 19.28730152198591 }

Volver

$stdDevPop

En esta página