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 los valores no numéricos.
Si los valores representan solo una muestra de una población de datos a partir de la cual se puede 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 utiliza en las $bucket $bucketAuto$group $setWindowFields etapas,, y, tiene esta$stdDevPop 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 no son $stdDevPop numéricos, $stdDevPop nulldevuelve.
Valor único
Si la muestra consta de un único valor numérico, $stdDevPop 0devuelve.
Arreglo Operand
En las etapas y, si la $group expresión se resuelve en una matriz, trata el operando como un valor no numérico y $setWindowFields $stdDevPop 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 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
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
Cree una colección de ejemplo denominada 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 para generar la desviación estándar de la población de las ventas de $setWindowFields pasteles quantity para state cada:
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 elstdDevPopQuantityForStatecampo en elquantityvalor de desviación estándar de la población utilizando que se$stdDevPopejecuta 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 }