Di MongoDB, $sampleRate
tahap pipa agregasi cocok dengan pilihan dokumen input secara acak.
Jumlah dokumen yang dipilih mendekati tingkat sampel yang dinyatakan sebagai persentase dari jumlah total dokumen.
$sampleRate
operator diperkenalkan di MongoDB 4.4.2.
Saat Anda menggunakan $sampleRate
, Anda memberikan tingkat sampel sebagai angka floating point antara 0
dan 1
. Proses pemilihan menggunakan distribusi acak yang seragam, dan laju sampel yang Anda berikan mewakili probabilitas bahwa dokumen tertentu akan dipilih saat melewati jalur pipa.
Contoh
Misalkan kita memiliki koleksi yang disebut employees
dengan dokumen sebagai berikut:
{ "_id" : 1, "name" : "Bob", "salary" : 55000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 4, "name" : "Christopher", "salary" : 45000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 } { "_id" : 6, "name" : "Homer", "salary" : 1 } { "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 } { "_id" : 8, "name" : "Zoro", "salary" : 300000 } { "_id" : 9, "name" : "Xena", "salary" : 382000 }
Kita dapat menggunakan $sample
tahap untuk secara acak memilih sejumlah dokumen tertentu dari koleksi itu.
Contoh:
db.employees.aggregate(
[
{
$match: { $sampleRate: 0.33 }
}
]
)
Hasil:
{ "_id" : 1, "name" : "Bob", "salary" : 55000 } { "_id" : 6, "name" : "Homer", "salary" : 1 } { "_id" : 8, "name" : "Zoro", "salary" : 300000 }
Dengan memberikan tingkat sampel 0.33
, kami menetapkan bahwa kira-kira sepertiga dari dokumen harus dikembalikan.
Namun, hasil sebenarnya dapat sangat bervariasi, tergantung pada berapa banyak dokumen yang ada dalam koleksi. Koleksi dengan jumlah dokumen yang lebih sedikit akan memiliki hasil yang cukup bervariasi, sedangkan koleksi yang lebih besar harus lebih mendekati distribusi acak seragam yang diharapkan.
Untuk mendemonstrasikan ini, inilah kumpulan hasil yang saya dapatkan ketika saya menjalankan kode yang sama lagi:
{ "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 4, "name" : "Christopher", "salary" : 45000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 } { "_id" : 6, "name" : "Homer", "salary" : 1 } { "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }
Dan lagi:
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 } { "_id" : 8, "name" : "Zoro", "salary" : 300000 }
Dan sekali lagi:
{ "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 6, "name" : "Homer", "salary" : 1 } { "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }
Ini adalah koleksi yang lebih kecil, sehingga hasilnya sangat bervariasi.
Jika Anda memerlukan jumlah pasti dokumen yang akan dikembalikan, gunakan $sample
panggung sebagai gantinya.