Definición
Cambiado en la versión 5.0.
Calcula la desviación estándar muestral de los valores de entrada. Úsela si los valores abarcan una muestra de una población de datos a partir de la cual se desea generalizar sobre la población. $stdDevSamp ignora los valores no numéricos.
Si los valores representan toda la población de datos o si no deseas generalizar sobre una población más grande, utiliza $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
Tipo de resultado
$stdDevSamp devuelve la desviación estándar muestral de los valores de entrada como un double.
Non-numeric Values
$stdDevSamp ignora los valores no numéricos. Si todos los operandos de una suma no son numéricos, $stdDevSamp nulldevuelve.
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 sola expresión como operando, si la expresión se resuelve en una matriz, recorre la matriz para operar sobre los elementos numéricos de la matriz para devolver un único
$stdDevSampvalor.Con una lista de expresiones como operando, si alguna de las expresiones se resuelve en una matriz,no recorre
$stdDevSampla matriz, sino que trata la matriz como un valor no numérico.
Window Values
Comportamiento con valores en una $setWindowFields etapa ventana:
Ignora los valores no numéricos, valores
nully los campos faltantes en una ventana.Si la ventana está vacía, devuelve
null.Si la ventana contiene un valor de
NaN, devuelvenull.Si la ventana contiene
Infinityvalores, retornanull.Si ninguno de los puntos anteriores aplica, devuelve un valor de
double.
Ejemplos
Uso 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 primero utiliza la canalización 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 }
Uso 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 la 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 a la desviación estándar de la muestra de losquantityvalores usando que se$stdDevSampejecuta 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 la muestra de losquantityvalores para los documentos entre el inicio 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 }