View a markdown version of this page

$ estándar DevPop - Amazon DocumentDB

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

$ estándar DevPop

Nuevo a partir de la versión 8.0.1.

El $stdDevPop operador de Amazon DocumentDB calcula la desviación estándar poblacional de los valores numéricos. Como acumulador, calcula la desviación estándar de la población entre los documentos de un grupo en fase de proceso de agregación. $group Como expresión, calcula la desviación estándar poblacional de una matriz de números. La desviación estándar de la población utiliza N como divisor (no N-1). Non-numeric los valores se ignoran. Si no hay valores numéricos, se devuelvenull. Si solo hay un valor numérico, se devuelve. 0

Parámetros

  • expression: expresión que se resuelve en un valor numérico o en una matriz de valores numéricos.

Ejemplo (MongoDB Shell)

El siguiente ejemplo muestra cómo usar el $stdDevPop operador para calcular la desviación estándar poblacional de las puntuaciones por asignatura.

Cree documentos de muestra

db.scores.insertMany([ { subject: "math", score: 60 }, { subject: "math", score: 75 }, { subject: "math", score: 85 }, { subject: "math", score: 92 }, { subject: "math", score: 78 }, { subject: "science", score: 55 }, { subject: "science", score: 70 }, { subject: "science", score: 82 }, { subject: "science", score: 91 }, { subject: "science", score: 67 } ]);

Ejemplo de consulta

db.scores.aggregate([ { $group: { _id: "$subject", stdDev: { $stdDevPop: "$score" } }} ]);

Salida

[ { "_id": "math", "stdDev": 10.75174404457249 }, { "_id": "science", "stdDev": 12.441864811996632 } ]

Ejemplo de uso de expresiones (MongoDB Shell)

El $stdDevPop operador también se puede usar como expresión dentro de una $project etapa para calcular la desviación estándar poblacional de un campo matricial.

Cree documentos de muestra

db.experiments.insertMany([ { _id: 1, measurements: [10, 12, 14, 16, 18] }, { _id: 2, measurements: [5, 5, 5, 5, 5] }, { _id: 3, measurements: [2, 4, 6, 8, 10] } ]);

Ejemplo de consulta

db.experiments.aggregate([ { $project: { stdDev: { $stdDevPop: "$measurements" } }} ]);

Salida

[ { "_id": 1, "stdDev": 2.8284271247461903 }, { "_id": 2, "stdDev": 0 }, { "_id": 3, "stdDev": 2.8284271247461903 } ]

Ejemplo de uso de un operador de ventana (MongoDB Shell)

Nuevo a partir de la versión 8.0.2.

El $stdDevPop operador también se puede utilizar como operador de ventanas en el $setWindowFields escenario. En este contexto, devuelve la desviación estándar poblacional de la expresión especificada para los documentos de cada ventana. Se especifica el operador en el output campo y, si lo desea, se definen los límites de la ventana con un window documento.

Cree documentos de muestra

db.sensorData.insertMany([ { _id: 1, sensor: "A", time: 1, reading: 4 }, { _id: 2, sensor: "A", time: 2, reading: 10 }, { _id: 3, sensor: "A", time: 3, reading: 10 }, { _id: 4, sensor: "B", time: 1, reading: 10 }, { _id: 5, sensor: "B", time: 2, reading: 20 } ]);

Ejemplo de consulta

En el ejemplo siguiente se dividen los documentossensor, se ordena cada partición y se devuelve la desviación estándar acumulada time reading desde el principio de la partición hasta el documento actual.

db.sensorData.aggregate([ { $setWindowFields: { partitionBy: "$sensor", sortBy: { time: 1 }, output: { runningStdDev: { $stdDevPop: "$reading", window: { documents: ["unbounded", "current"] } } } } } ]);

Salida

[ { "_id": 1, "sensor": "A", "time": 1, "reading": 4, "runningStdDev": 0 }, { "_id": 2, "sensor": "A", "time": 2, "reading": 10, "runningStdDev": 3 }, { "_id": 3, "sensor": "A", "time": 3, "reading": 10, "runningStdDev": 2.8284271247461903 }, { "_id": 4, "sensor": "B", "time": 1, "reading": 10, "runningStdDev": 0 }, { "_id": 5, "sensor": "B", "time": 2, "reading": 20, "runningStdDev": 5 } ]

Cada documento se complementa con runningStdDev la desviación estándar de población reading dentro de su partición hasta el documento actual, incluido. Cuando la ventana contiene un único valor, $stdDevPop devuelve0.

Ejemplos de código

Para ver un ejemplo de código sobre el uso $stdDevPop del operador, seleccione la pestaña correspondiente al idioma que desee utilizar. Los siguientes ejemplos muestran el uso del acumulador (in$group), el uso de expresiones (in$project) y el uso del operador de ventana (in$setWindowFields):

Node.js
const { MongoClient } = require('mongodb'); async function example() { const uri = 'mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false'; const client = new MongoClient(uri); try { await client.connect(); const db = client.db('test'); // Accumulator usage: stdDevPop across grouped documents const scores = db.collection('scores'); await scores.insertMany([ { subject: "math", score: 60 }, { subject: "math", score: 75 }, { subject: "math", score: 85 }, { subject: "math", score: 92 }, { subject: "math", score: 78 }, { subject: "science", score: 55 }, { subject: "science", score: 70 }, { subject: "science", score: 82 }, { subject: "science", score: 91 }, { subject: "science", score: 67 } ]); const accumulatorResult = await scores.aggregate([ { $group: { _id: "$subject", stdDev: { $stdDevPop: "$score" } }} ]).toArray(); console.log('Accumulator result:', accumulatorResult); // Expression usage: stdDevPop of an array field const experiments = db.collection('experiments'); await experiments.insertMany([ { _id: 1, measurements: [10, 12, 14, 16, 18] }, { _id: 2, measurements: [5, 5, 5, 5, 5] }, { _id: 3, measurements: [2, 4, 6, 8, 10] } ]); const expressionResult = await experiments.aggregate([ { $project: { stdDev: { $stdDevPop: "$measurements" } }} ]).toArray(); console.log('Expression result:', expressionResult); // Window operator usage: running stdDevPop within each partition const sensorData = db.collection('sensorData'); await sensorData.insertMany([ { _id: 1, sensor: "A", time: 1, reading: 4 }, { _id: 2, sensor: "A", time: 2, reading: 10 }, { _id: 3, sensor: "A", time: 3, reading: 10 }, { _id: 4, sensor: "B", time: 1, reading: 10 }, { _id: 5, sensor: "B", time: 2, reading: 20 } ]); const windowResult = await sensorData.aggregate([ { $setWindowFields: { partitionBy: "$sensor", sortBy: { time: 1 }, output: { runningStdDev: { $stdDevPop: "$reading", window: { documents: ["unbounded", "current"] } } } } } ]).toArray(); console.log('Window result:', windowResult); } finally { await client.close(); } } example();
Python
from pymongo import MongoClient def example(): client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false') try: db = client['test'] # Accumulator usage: stdDevPop across grouped documents scores = db['scores'] scores.insert_many([ { 'subject': 'math', 'score': 60 }, { 'subject': 'math', 'score': 75 }, { 'subject': 'math', 'score': 85 }, { 'subject': 'math', 'score': 92 }, { 'subject': 'math', 'score': 78 }, { 'subject': 'science', 'score': 55 }, { 'subject': 'science', 'score': 70 }, { 'subject': 'science', 'score': 82 }, { 'subject': 'science', 'score': 91 }, { 'subject': 'science', 'score': 67 } ]) accumulator_result = list(scores.aggregate([ { '$group': { '_id': '$subject', 'stdDev': { '$stdDevPop': '$score' } }} ])) print('Accumulator result:', accumulator_result) # Expression usage: stdDevPop of an array field experiments = db['experiments'] experiments.insert_many([ { '_id': 1, 'measurements': [10, 12, 14, 16, 18] }, { '_id': 2, 'measurements': [5, 5, 5, 5, 5] }, { '_id': 3, 'measurements': [2, 4, 6, 8, 10] } ]) expression_result = list(experiments.aggregate([ { '$project': { 'stdDev': { '$stdDevPop': '$measurements' } }} ])) print('Expression result:', expression_result) # Window operator usage: running stdDevPop within each partition sensor_data = db['sensorData'] sensor_data.insert_many([ { '_id': 1, 'sensor': 'A', 'time': 1, 'reading': 4 }, { '_id': 2, 'sensor': 'A', 'time': 2, 'reading': 10 }, { '_id': 3, 'sensor': 'A', 'time': 3, 'reading': 10 }, { '_id': 4, 'sensor': 'B', 'time': 1, 'reading': 10 }, { '_id': 5, 'sensor': 'B', 'time': 2, 'reading': 20 } ]) window_result = list(sensor_data.aggregate([ { '$setWindowFields': { 'partitionBy': '$sensor', 'sortBy': { 'time': 1 }, 'output': { 'runningStdDev': { '$stdDevPop': '$reading', 'window': { 'documents': ['unbounded', 'current'] } } } } } ])) print('Window result:', window_result) finally: client.close() example()