Definición
Modificado en la versión 5.0.
Calcula la desviación estándar poblacional de los valores de entrada. Úselo si los valores abarcan toda la población de datos que desea representar y no desea generalizar sobre una población mayor. $stdDevPop ignora valores no numéricos.
Si los valores representan solo una muestra de una población de datos de los que se pretende generalizar sobre la población, utilice $stdDevSamp
en su lugar.
$stdDevPop 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, $stdDevPop tiene esta sintaxis:
{ $stdDevPop: <expression> }
Cuando se utiliza en otras etapas compatibles, tiene una de dos$stdDevPop sintaxis:
$stdDevPoptiene una expresión especificada como su operando:{ $stdDevPop: <expression> } $stdDevPoptiene una lista de expresiones especificadas como su operando:{ $stdDevPop: [ <expression1>, <expression2> ... ] }
El argumento para puede $stdDevPop 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
$stdDevPop ignora los valores no numéricos. Si todos los operandos de una $stdDevPop no son numéricos, $stdDevPop devuelve null.
Valor único
Si la muestra consta de un único valor numérico, $stdDevPop 0devuelve.
Arreglo Operand
En las etapas $group y $setWindowFields, si la expresión se resuelve en un arreglo, $stdDevPop trata el operando como un valor no numérico y no tiene ningún efecto en el cálculo.
En las otras etapas admitidas:
Con una única expresión como operando, si la expresión se resuelve en un arreglo,
$stdDevPoprecorre 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,
$stdDevPopno 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
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 }
Usar 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 }
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 $stdDevPop en la etapa $setWindowFields para obtener la desviación estándar poblacional de las ventas de pasteles quantity para cada 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.
outputestablece el campostdDevPopQuantityForStatecon el valor de desviación estándar de la poblaciónquantityusando$stdDevPopque se ejecuta en una ventana de documentos.La ventana contiene documentos entre un límite inferior
unboundedy el documentocurrenten la salida. Esto significa que$stdDevPopdevuelve el valor de desviación estándar poblacionalquantitypara los documentos entre el inicio de la partición y el documento actual.
En este ejemplo de salida, el valor de la desviación estándar de la población 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 }