Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
$ persentil
Baru dari versi 8.0.1.
$percentileOperator di Amazon DocumentDB menghitung nilai persentil tertentu untuk data numerik. Sebagai akumulator, ia menghitung nilai persentil di seluruh dokumen dalam grup dalam $group tahap pipeline agregasi. Sebagai ekspresi, ia menghitung persentil untuk array angka.
Parameter
-
input: Ekspresi yang diselesaikan ke nilai numerik atau array nilai numerik. -
p: Array nilai persentil antara 0 dan 1, di mana setiap nilai mewakili persentil untuk dihitung. Misalnya,[0.25, 0.5, 0.75]menghitung persentil ke-25, ke-50, dan ke-75. -
method: Sebuah string yang menentukan metode perhitungan. Saat ini hanya mendukung"approximate".
Perilaku
"approximate"Metode ini menggunakan algoritma t-Digest untuk menghitung perkiraan metrik berbasis persentil. Dengan kumpulan data kecil, nilai persentil yang berbeda dapat mencapai hasil yang sama. Misalnya, dengan hanya 5 nilai per grup, p90 dan p99 keduanya dapat mengembalikan nilai maksimum dalam grup. Presisi meningkat seiring bertambahnya jumlah titik data.
Contoh (MongoDB Shell)
Contoh berikut menunjukkan cara menggunakan $percentile operator untuk menghitung persentil skor ke-25 dan ke-75 per kelas.
Buat dokumen sampel
db.students.insertMany([ { class: "A", score: 72 }, { class: "A", score: 85 }, { class: "A", score: 90 }, { class: "A", score: 68 }, { class: "A", score: 95 }, { class: "B", score: 80 }, { class: "B", score: 75 }, { class: "B", score: 92 }, { class: "B", score: 88 }, { class: "B", score: 70 } ]);
Contoh kueri
db.students.aggregate([ { $group: { _id: "$class", percentiles: { $percentile: { input: "$score", p: [0.25, 0.75], method: "approximate" } } }} ]);
Keluaran
[
{ "_id": "A", "percentiles": [72, 90] },
{ "_id": "B", "percentiles": [75, 88] }
]
Contoh penggunaan ekspresi (MongoDB Shell)
$percentileOperator juga dapat digunakan sebagai ekspresi dalam $project tahap untuk menghitung persentil bidang array.
Buat dokumen sampel
db.surveys.insertMany([ { _id: 1, responses: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] }, { _id: 2, responses: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19] } ]);
Contoh kueri
db.surveys.aggregate([ { $project: { quartiles: { $percentile: { input: "$responses", p: [0.25, 0.5, 0.75], method: "approximate" } } }} ]);
Keluaran
[
{ "_id": 1, "quartiles": [6, 10, 16] },
{ "_id": 2, "quartiles": [5, 9, 15] }
]
Contoh penggunaan operator jendela (MongoDB Shell)
Baru dari versi 8.0.2.
$percentileOperator juga dapat digunakan sebagai operator jendela di pang $setWindowFields gung. Dalam konteks ini, ia menghitung nilai persentil yang ditentukan untuk dokumen di setiap jendela. Anda menentukan operator di bawah output bidang, dan secara opsional menentukan batas jendela dengan window dokumen.
catatan
Ketika digunakan sebagai operator jendela di$setWindowFields, $percentile dibatasi hingga 100 MB data perantara. Operasi yang melebihi batas ini mengembalikan kesalahan.
Buat dokumen sampel
db.sensorData.insertMany([ { _id: 1, sensor: "A", reading: 72 }, { _id: 2, sensor: "A", reading: 85 }, { _id: 3, sensor: "A", reading: 90 }, { _id: 4, sensor: "A", reading: 68 }, { _id: 5, sensor: "A", reading: 95 }, { _id: 6, sensor: "B", reading: 80 }, { _id: 7, sensor: "B", reading: 75 }, { _id: 8, sensor: "B", reading: 92 }, { _id: 9, sensor: "B", reading: 88 }, { _id: 10, sensor: "B", reading: 70 } ]);
Contoh kueri
Contoh berikut mempartisi dokumen dengan sensor dan menghitung persentil ke-25 dan ke-75 dari semua dokumen reading di setiap partisi.
db.sensorData.aggregate([ { $setWindowFields: { partitionBy: "$sensor", output: { readingPercentiles: { $percentile: { input: "$reading", p: [0.25, 0.75], method: "approximate" }, window: { documents: ["unbounded", "unbounded"] } } } } } ]);
Keluaran
[
{ "_id": 1, "sensor": "A", "reading": 72, "readingPercentiles": [72, 90] },
{ "_id": 2, "sensor": "A", "reading": 85, "readingPercentiles": [72, 90] },
{ "_id": 3, "sensor": "A", "reading": 90, "readingPercentiles": [72, 90] },
{ "_id": 4, "sensor": "A", "reading": 68, "readingPercentiles": [72, 90] },
{ "_id": 5, "sensor": "A", "reading": 95, "readingPercentiles": [72, 90] },
{ "_id": 6, "sensor": "B", "reading": 80, "readingPercentiles": [75, 88] },
{ "_id": 7, "sensor": "B", "reading": 75, "readingPercentiles": [75, 88] },
{ "_id": 8, "sensor": "B", "reading": 92, "readingPercentiles": [75, 88] },
{ "_id": 9, "sensor": "B", "reading": 88, "readingPercentiles": [75, 88] },
{ "_id": 10, "sensor": "B", "reading": 70, "readingPercentiles": [75, 88] }
]
Setiap dokumen ditambah denganreadingPercentiles, perkiraan persentil ke-25 dan ke-75 dari semua dokumen reading di partisinya.
Contoh kode
Untuk melihat contoh kode untuk menggunakan $percentile 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):