Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

$stdDevPop (operador acumulador)

$stdDevPop

Modificado en la versión 5.0.

Calcula la desviación estándar poblacional de los valores de entrada. Úsalo si los valores abarcan toda la población de datos que deseas representar y no deseas generalizar sobre una población más grande. $stdDevPop ignores non-numeric values.

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:

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:

  • $stdDevPop tiene una expresión especificada como su operando:

    { $stdDevPop: <expression> }
  • $stdDevPop tiene 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.

$stdDevPop devuelve la desviación estándar de la población de los valores de entrada como un decimal.

$stdDevPop ignora los valores no numéricos. Si todos los operandos de una $stdDevPop no son numéricos, $stdDevPop devuelve null.

Si la muestra consta de un único valor numérico, $stdDevPop 0devuelve.

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, $stdDevPop recorre 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, $stdDevPop no recorre el arreglo sino que lo trata como un valor no numérico.

Comportamiento con valores en una $setWindowFields etapa ventana:

  • Ignora valores no numéricos, valores null y campos faltantes en una ventana.

  • Si la ventana está vacía, devuelve null.

  • Si la ventana contiene un valor NaN, devuelve null.

  • Si la ventana contiene Infinity valores, retorna null.

  • Si ninguno de los puntos anteriores aplica, devuelve un valor de double.

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 }

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 }

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 en state. Existen particiones para CA y WA.

  • sortBy: { orderDate: 1 } ordena los documentos de cada partición por orderDate en orden ascendente (1), de modo que el orderDate más antiguo sea el primero.

  • output establece el campo stdDevPopQuantityForState con el valor de desviación estándar de la población quantity usando $stdDevPop que se ejecuta en una ventana de documentos.

    La ventana contiene documentos entre un límite inferior unbounded y el documento current en la salida. Esto significa que $stdDevPop devuelve el valor de desviación estándar poblacional quantity para 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 }

Volver

$push

En esta página