View a markdown version of this page

$ std DevPop - Amazon DocumentDB

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

$ std DevPop

Neu ab Version 8.0.1.

Der $stdDevPop Operator in Amazon DocumentDB berechnet die Populationsstandardabweichung numerischer Werte. Als Akkumulator berechnet er in der $group Phase einer Aggregationspipeline die Standardabweichung der Grundgesamtheiten für Dokumente innerhalb einer Gruppe. Als Ausdruck berechnet er die Standardabweichung der Grundgesamtheit einer Reihe von Zahlen. Bei der Standardabweichung der Grundgesamtheit wird N als Divisor verwendet (nicht N-1). Non-numeric Werte werden ignoriert. Wenn es keine numerischen Werte gibt, wird zurückgegebennull. Wenn es nur einen numerischen Wert gibt, wird er zurückgegeben0.

Parameter

  • expression: Ein Ausdruck, der in einen numerischen Wert oder ein Array numerischer Werte aufgelöst wird.

Beispiel (MongoDB Shell)

Das folgende Beispiel zeigt, wie der $stdDevPop Operator verwendet wird, um die Populationsstandardabweichung der Punktzahlen pro Proband zu berechnen.

Erstellen Sie Beispieldokumente

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 } ]);

Beispiel für eine Abfrage

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

Ausgabe

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

Beispiel für die Verwendung von Ausdrücken (MongoDB Shell)

Der $stdDevPop Operator kann auch als Ausdruck innerhalb einer $project Phase verwendet werden, um die Populationsstandardabweichung eines Array-Feldes zu berechnen.

Erstellen Sie Beispieldokumente

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] } ]);

Beispiel für eine Abfrage

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

Ausgabe

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

Beispiel für die Verwendung von Fensteroperatoren (MongoDB Shell)

Neu ab Version 8.0.2.

Der $stdDevPop Operator kann auch als Fensterbediener auf der $setWindowFields Bühne verwendet werden. In diesem Zusammenhang wird die Standardabweichung der Grundgesamtheit des angegebenen Ausdrucks für die Dokumente in jedem Fenster zurückgegeben. Sie geben den Operator unter dem output Feld an und definieren optional die Fenstergrenzen mit einem window Dokument.

Erstellen Sie Beispieldokumente

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 } ]);

Beispiel für eine Abfrage

Das folgende Beispiel partitioniert die Dokumente nachsensor, sortiert jede Partition nach time und gibt die aktuelle Standardabweichung der Population reading vom Anfang der Partition bis zum aktuellen Dokument zurück.

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

Ausgabe

[ { "_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 } ]

Jedes Dokument wird um die Standardabweichung der Grundgesamtheit reading innerhalb seiner Partition bis einschließlich des aktuellen Dokuments erweitert. runningStdDev Wenn das Fenster einen einzelnen Wert enthält, wird $stdDevPop zurückgegeben0.

Codebeispiele

Um ein Codebeispiel für die Verwendung des $stdDevPop Operators anzuzeigen, wählen Sie die Registerkarte für die Sprache, die Sie verwenden möchten. Die folgenden Beispiele zeigen die Verwendung von Akkumulatoren (in$group), Ausdrücken (in$project) und Fensteroperatoren (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()