Docs Menu
Docs Home
/ /

$stdDevSamp (operador acumulador)

$stdDevSamp

Modificado en la versión 5.0.

Calcula la desviación estándar muestral de los valores de entrada. Se utiliza si los valores abarcan una muestra de una población de datos a partir de la cual se puede generalizar sobre la población. $stdDevSamp ignora valores no numéricos.

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

$stdDevSamp está disponible en estas etapas:

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

{ $stdDevSamp: <expression> }

Cuando se utiliza en otras etapas compatibles, tiene una de dos$stdDevSamp 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 para puede $stdDevSamp ser cualquier expresión siempre que se resuelva en una matriz.

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

$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 único valor numérico, $stdDevSamp nulldevuelve.

En las etapas y, si la $group expresión se resuelve en una matriz, trata el operando $setWindowFields $stdDevSamp 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 ventana de etapa:

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

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

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

  • Si la ventana contiene Infinity valores, retorna null.

  • Si no se aplica ninguno de los puntos anteriores, devuelve un valor 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 la tubería para $sample muestrear 100 usuarios y luego utiliza para $stdDevSamp calcular la desviación estándar para 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 utiliza $stdDevSamp en la etapa para generar la desviación estándar de muestra de $setWindowFields los quantity valores de las ventas de pasteles para state cada:

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 stdDevSampQuantityForState campo en la desviación estándar de muestra de los quantity valores 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 la salida. Esto significa que $stdDevSamp devuelve la desviación estándar de muestra de los quantity valores para los documentos entre el inicio de la partición y el documento actual.

En esta salida, el valor de la desviación estándar de muestra quantity para CA y WA se muestra 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