Definición
Cambiado en la versión 5.0.
Calculates the population standard deviation of the input values. Use if the values encompass the entire population of data you want to represent and do not wish to generalize about a larger population. $stdDevPop ignores non-numeric values.
Si los valores representan solo una muestra de una población de datos sobre la que se generaliza, utiliza $stdDevSamp en su lugar.
$stdDevPop está disponible en estas etapas:
$setWindowFields(Disponible a partir de MongoDB 5.0)
Sintaxis
When used in the $bucket, $bucketAuto, $group, and $setWindowFields stages, $stdDevPop has this syntax:
{ $stdDevPop: <expression> }
When used in other supported stages, $stdDevPop has one of two syntaxes:
$stdDevPoptiene una expresión especificada como su operando:{ $stdDevPop: <expression> } $stdDevPoptiene una lista de expresiones especificadas como su operando:{ $stdDevPop: [ <expression1>, <expression2> ... ] }
The argument for $stdDevPop can be any expression as long as it resolves to an array.
Para obtener más información sobre las expresiones, consulta Expresiones.
Comportamiento
Tipo de resultado
$stdDevPop devuelve la desviación estándar de la población de los valores de entrada como un double.
Non-numeric Values
$stdDevPop ignores non-numeric values. If all operands for a $stdDevPop are non-numeric, $stdDevPop returns null.
Valor único
If the sample consists of a single numeric value, $stdDevPop returns 0.
Arreglo Operand
In the $group and $setWindowFields stages, if the expression resolves to an array, $stdDevPop treats the operand as a non-numerical value and has no effect on the calculation.
En las otras etapas admitidas:
With a single expression as its operand, if the expression resolves to an array,
$stdDevPoptraverses into the array to operate on the numeric elements of the array to return a single value.With a list of expressions as its operand, if any of the expressions resolves to an array,
$stdDevPopdoes not traverse into the array but instead treats the array as a non-numeric value.
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
Crea una colección llamada users con los siguientes documentos:
db.users.insertMany( [ { _id : 1, name : "dave123", quiz : 1, score : 85 }, { _id : 2, name : "dave2", quiz : 1, score : 90 }, { _id : 3, name : "ahn", quiz : 1, score : 71 }, { _id : 4, name : "li", quiz : 2, score : 96 }, { _id : 5, name : "annT", quiz : 2, score : 77 }, { _id : 6, name : "ty", quiz : 2, score : 82 } ] )
El siguiente ejemplo calcula la desviación estándar de cada cuestionario:
db.users.aggregate( [ { $group: { _id: "$quiz", stdDev: { $stdDevPop: "$score" } } } ] )
La operación devuelve los siguientes resultados:
{ "_id" : 2, "stdDev" : 8.04155872120988 } { "_id" : 1, "stdDev" : 8.04155872120988 }
Uso en la etapa $project
Crea una colección de ejemplo llamada quizzes con los siguientes documentos:
db.quizzes.insertMany( [ { _id : 1, scores : [ { name : "dave123", score : 85 }, { name : "dave2", score : 90 }, { name : "ahn", score : 71 } ] }, { _id : 2, scores : [ { name : "li", quiz : 2, score : 96 }, { name : "annT", score : 77 }, { name : "ty", score : 82 } ] } ] )
El siguiente ejemplo calcula la desviación estándar de cada cuestionario:
db.quizzes.aggregate( [ { $project: { stdDev: { $stdDevPop: "$scores.score" } } } ] )
La operación devuelve los siguientes resultados:
{ _id : 1, stdDev : 8.04155872120988 } { _id : 2, stdDev : 8.04155872120988 }
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 } ] )
This example uses $stdDevPop in the $setWindowFields stage to output the population standard deviation of the cake sales quantity for each state:
db.cakeSales.aggregate( [ { $setWindowFields: { partitionBy: "$state", sortBy: { orderDate: 1 }, output: { stdDevPopQuantityForState: { $stdDevPop: "$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.
outputsets thestdDevPopQuantityForStatefield to thequantitypopulation standard deviation value using$stdDevPopthat is run in a documents window.The window contains documents between an
unboundedlower limit and thecurrentdocument in the output. This means$stdDevPopreturns thequantitypopulation standard deviation value for the documents between the beginning of the partition and the current document.
En este ejemplo de salida, el valor de desviación estándar de la población de quantity para CA y WA se muestra en el campo stdDevPopQuantityForState:
{ _id : 4, type : "strawberry", orderDate : ISODate("2019-05-18T16:09:01Z"), state : "CA", price : 41, quantity : 162, stdDevPopQuantityForState : 0 } { _id : 0, type : "chocolate", orderDate : ISODate("2020-05-18T14:10:30Z"), state : "CA", price : 13, quantity : 120, stdDevPopQuantityForState : 21 } { _id : 2, type : "vanilla", orderDate : ISODate("2021-01-11T06:31:15Z"), state : "CA", price : 12, quantity : 145, stdDevPopQuantityForState : 17.249798710580816 } { _id : 5, type : "strawberry", orderDate : ISODate("2019-01-08T06:12:03Z"), state : "WA", price : 43, quantity : 134, stdDevPopQuantityForState : 0 } { _id : 3, type : "vanilla", orderDate : ISODate("2020-02-08T13:13:23Z"), state : "WA", price : 13, quantity : 104, stdDevPopQuantityForState : 15 } { _id : 1, type : "chocolate", orderDate : ISODate("2021-03-20T11:30:05Z"), state : "WA", price : 14, quantity : 140, stdDevPopQuantityForState : 15.748015748023622 }