View a markdown version of this page

$std DevSamp - Amazon DocumentDB

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

$std DevSamp

Baru dari versi 8.0.1.

$stdDevSampOperator di Amazon DocumentDB menghitung standar deviasi sampel dari nilai numerik. Sebagai akumulator, ia menghitung deviasi standar sampel di seluruh dokumen dalam grup dalam $group tahap pipa agregasi. Sebagai ekspresi, ia menghitung standar deviasi sampel dari array angka. Deviasi standar sampel digunakan N-1 sebagai pembagi (koreksi Bessel). Non-numeric nilai-nilai diabaikan. Jika ada kurang dari dua nilai numerik, itu kembalinull.

Parameter

  • expression: Ekspresi yang diselesaikan ke nilai numerik atau array nilai numerik.

Contoh (MongoDB Shell)

Contoh berikut menunjukkan cara menggunakan $stdDevSamp operator untuk menghitung standar deviasi sampel skor per subjek.

Buat dokumen sampel

db.scores.insertMany([ { subject: "math", score: 80 }, { subject: "math", score: 90 }, { subject: "math", score: 85 }, { subject: "math", score: 95 }, { subject: "science", score: 70 }, { subject: "science", score: 75 }, { subject: "science", score: 80 }, { subject: "science", score: 85 } ]);

Contoh kueri

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

Keluaran

[ { "_id": "math", "stdDev": 6.454972243679028 }, { "_id": "science", "stdDev": 6.454972243679028 } ]

Contoh penggunaan ekspresi (MongoDB Shell)

$stdDevSampOperator juga dapat digunakan sebagai ekspresi dalam $project tahap untuk menghitung standar deviasi sampel dari bidang array.

Buat dokumen sampel

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

Contoh kueri

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

Keluaran

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

Contoh penggunaan operator jendela (MongoDB Shell)

Baru dari versi 8.0.2.

$stdDevSampOperator juga dapat digunakan sebagai operator jendela di pang $setWindowFields gung. Dalam konteks ini, ia mengembalikan sampel standar deviasi dari ekspresi yang ditentukan untuk dokumen di setiap jendela. Anda menentukan operator di bawah output bidang, dan secara opsional menentukan batas jendela dengan window dokumen.

Buat dokumen sampel

db.sensorReadings.insertMany([ { _id: 1, sensor: "A", time: 1, value: 2 }, { _id: 2, sensor: "A", time: 2, value: 4 }, { _id: 3, sensor: "A", time: 3, value: 6 }, { _id: 4, sensor: "B", time: 1, value: 10 }, { _id: 5, sensor: "B", time: 2, value: 12 } ]);

Contoh kueri

Contoh berikut mempartisi dokumen berdasarkansensor, mengurutkan setiap partisi berdasarkantime, dan mengembalikan standar deviasi sampel yang sedang berjalan value dari awal partisi melalui dokumen saat ini.

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

Keluaran

[ { "_id": 1, "sensor": "A", "time": 1, "value": 2, "runningStdDev": null }, { "_id": 2, "sensor": "A", "time": 2, "value": 4, "runningStdDev": 1.4142135623730951 }, { "_id": 3, "sensor": "A", "time": 3, "value": 6, "runningStdDev": 2 }, { "_id": 4, "sensor": "B", "time": 1, "value": 10, "runningStdDev": null }, { "_id": 5, "sensor": "B", "time": 2, "value": 12, "runningStdDev": 1.4142135623730951 } ]

Setiap dokumen ditambah denganrunningStdDev, standar deviasi sampel di value dalam partisinya hingga dan termasuk dokumen saat ini. Ketika jendela berisi kurang dari dua nilai (dokumen pertama di setiap partisi), $stdDevSamp kembalinull.

Contoh kode

Untuk melihat contoh kode untuk menggunakan $stdDevSamp operator, pilih tab untuk bahasa yang ingin Anda gunakan. Contoh berikut menunjukkan penggunaan akumulator (in$group), penggunaan ekspresi (in$project), dan penggunaan operator jendela (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: stdDevSamp across grouped documents const scores = db.collection('scores'); await scores.insertMany([ { subject: "math", score: 80 }, { subject: "math", score: 90 }, { subject: "math", score: 85 }, { subject: "math", score: 95 }, { subject: "science", score: 70 }, { subject: "science", score: 75 }, { subject: "science", score: 80 }, { subject: "science", score: 85 } ]); const accumulatorResult = await scores.aggregate([ { $group: { _id: "$subject", stdDev: { $stdDevSamp: "$score" } }} ]).toArray(); console.log('Accumulator result:', accumulatorResult); // Expression usage: stdDevSamp 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: { $stdDevSamp: "$measurements" } }} ]).toArray(); console.log('Expression result:', expressionResult); // Window operator usage: running stdDevSamp within each partition const sensorReadings = db.collection('sensorReadings'); await sensorReadings.insertMany([ { _id: 1, sensor: "A", time: 1, value: 2 }, { _id: 2, sensor: "A", time: 2, value: 4 }, { _id: 3, sensor: "A", time: 3, value: 6 }, { _id: 4, sensor: "B", time: 1, value: 10 }, { _id: 5, sensor: "B", time: 2, value: 12 } ]); const windowResult = await sensorReadings.aggregate([ { $setWindowFields: { partitionBy: "$sensor", sortBy: { time: 1 }, output: { runningStdDev: { $stdDevSamp: "$value", 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: stdDevSamp across grouped documents scores = db['scores'] scores.insert_many([ { 'subject': 'math', 'score': 80 }, { 'subject': 'math', 'score': 90 }, { 'subject': 'math', 'score': 85 }, { 'subject': 'math', 'score': 95 }, { 'subject': 'science', 'score': 70 }, { 'subject': 'science', 'score': 75 }, { 'subject': 'science', 'score': 80 }, { 'subject': 'science', 'score': 85 } ]) accumulator_result = list(scores.aggregate([ { '$group': { '_id': '$subject', 'stdDev': { '$stdDevSamp': '$score' } }} ])) print('Accumulator result:', accumulator_result) # Expression usage: stdDevSamp 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': { '$stdDevSamp': '$measurements' } }} ])) print('Expression result:', expression_result) # Window operator usage: running stdDevSamp within each partition sensor_readings = db['sensorReadings'] sensor_readings.insert_many([ { '_id': 1, 'sensor': 'A', 'time': 1, 'value': 2 }, { '_id': 2, 'sensor': 'A', 'time': 2, 'value': 4 }, { '_id': 3, 'sensor': 'A', 'time': 3, 'value': 6 }, { '_id': 4, 'sensor': 'B', 'time': 1, 'value': 10 }, { '_id': 5, 'sensor': 'B', 'time': 2, 'value': 12 } ]) window_result = list(sensor_readings.aggregate([ { '$setWindowFields': { 'partitionBy': '$sensor', 'sortBy': { 'time': 1 }, 'output': { 'runningStdDev': { '$stdDevSamp': '$value', 'window': { 'documents': ['unbounded', 'current'] } } } } } ])) print('Window result:', window_result) finally: client.close() example()