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 ignores non-numeric values.
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 usa en las etapas $bucket, $bucketAuto, $group y $setWindowFields, $stdDevSamp tiene esta 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 $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,
$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 etapa ventana:
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 ninguno de los puntos anteriores aplica, devuelve un valor de
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 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 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 el campostdDevSampQuantityForStatea la desviación estándar muestral de los valoresquantityutilizando$stdDevSampque se ejecuta en una ventana de documentos.La ventana contiene documentos entre un
unboundedlímite inferior y elcurrentdocumento en el resultado. Esto significa que$stdDevSampdevuelve la desviación estándar de la muestra de los valoresquantitypara 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 }