Definición
Cambiado en la versión 5.0.
Calcula la desviación estándar poblacional de los valores de entrada. Úsela 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 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
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
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 ignora los valores no numéricos. Si todos los operandos de un 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 efecto en el cálculo.
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
$stdDevPopvalor.Con una lista de expresiones como operando, si alguna de las expresiones se resuelve en una matriz,no recorre
$stdDevPopla 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
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 } ] )
Este ejemplo utiliza $stdDevPop en la etapa para generar la desviación estándar poblacional 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 alquantityvalor de desviación estándar de la población usando que se$stdDevPopejecuta en una ventana de documentos.La ventana contiene documentos entre un
unboundedlímite inferior y elcurrentdocumento en la salida. Esto significa que devuelve$stdDevPopelquantityvalor de desviación estándar de la población para los documentos entre el inicio de la partición y el documento actual.
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 }