Definición
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 los 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:
$setWindowFields(Disponible a partir de MongoDB 5.0)
Sintaxis
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:
$stdDevSamptiene una expresión especificada como su operando:{ $stdDevSamp: <expression> } $stdDevSamptiene 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.
Comportamiento
Non-numeric Values
$stdDevSamp ignora los valores no numéricos. Si todos los operandos de una suma son no numéricos, $stdDevSamp devuelve null.
Valor único
Si la muestra consta de un único valor numérico, $stdDevSamp nulldevuelve.
Arreglo Operand
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,
$stdDevSamprecorre 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,
$stdDevSampno recorre el arreglo sino que lo trata como un valor no numérico.
Window Values
Comportamiento con valores en una $setWindowFields ventana de etapa:
Ignora valores no numéricos, valores
nully campos faltantes en una ventana.Si la ventana está vacía, devuelve
null.Si la ventana contiene un valor
NaN, devuelvenull.Si la ventana contiene
Infinityvalores, retornanull.Si no se aplica ninguno de los puntos anteriores, devuelve un valor
double.
Ejemplos
Usar en la etapa $group
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 }
Usar en la etapa $setWindowFields
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 enstate. Existen particiones paraCAyWA.sortBy: { orderDate: 1 }ordena los documentos de cada partición pororderDateen orden ascendente (1), de modo que elorderDatemás antiguo sea el primero.
outputEstablece elstdDevSampQuantityForStatecampo en la desviación estándar de muestra de losquantityvalores utilizando$stdDevSampque se ejecuta en una ventana de documentos.La ventana contiene documentos entre un
unboundedlímite inferior y elcurrentdocumento en la salida. Esto significa que$stdDevSampdevuelve la desviación estándar de muestra de losquantityvalores 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 }