Di MongoDB, $sample
tahap pipa agregasi secara acak memilih jumlah dokumen yang ditentukan dari inputnya.
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(
[
{
$sample: { size: 3 }
}
]
)
Hasil:
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 }
Dalam hal ini saya menentukan bahwa ukuran sampel adalah 3. Kita dapat melihat bahwa tiga dokumen dikembalikan secara acak.
Berikut hasilnya jika saya menjalankan kode yang sama lagi:
{ "_id" : 1, "name" : "Bob", "salary" : 55000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 9, "name" : "Xena", "salary" : 382000 }
Kami mendapatkan pilihan dokumen yang berbeda.
Kita dapat meningkatkan ukuran sampel dengan meningkatkan jumlahnya.
Contoh:
db.employees.aggregate(
[
{
$sample: { size: 5 }
}
]
)
Hasil:
{ "_id" : 9, "name" : "Xena", "salary" : 382000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 4, "name" : "Christopher", "salary" : 45000 } { "_id" : 8, "name" : "Zoro", "salary" : 300000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 }
Kembalikan Semua Dokumen Secara Acak
Jika ukuran sampel yang diminta cocok, atau lebih besar dari jumlah dokumen dalam koleksi, semua dokumen dikembalikan secara acak.
Contoh:
db.employees.aggregate(
[
{
$sample: { size: 100 }
}
]
)
Hasil:
{ "_id" : 4, "name" : "Christopher", "salary" : 45000 } { "_id" : 8, "name" : "Zoro", "salary" : 300000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 6, "name" : "Homer", "salary" : 1 } { "_id" : 9, "name" : "Xena", "salary" : 382000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 } { "_id" : 1, "name" : "Bob", "salary" : 55000 }
Bagaimana $sample
Menghitung Hasil
$sample
tahap menggunakan salah satu dari dua metode untuk menghasilkan hasil. Metode aktual yang digunakan tergantung pada skenario.
Tabel berikut menguraikan metode mana yang digunakan untuk setiap skenario.
Skenario | Metode yang digunakan untuk menghasilkan hasil |
---|---|
Semua kondisi berikut terpenuhi: – $sample adalah tahap pertama dari pipa – Ukuran sampel yang ditentukan kurang dari 5% dari total dokumen dalam koleksi – Koleksinya berisi lebih dari 100 dokumen | $sample menggunakan kursor pseudo-acak untuk memilih dokumen. |
Semua ketentuan di atas tidak bertemu. | $sample melakukan pemindaian koleksi diikuti dengan pengurutan acak untuk memilih jumlah dokumen yang ditentukan. |
Duplikat
Dokumentasi MongoDB memperingatkan bahwa $sample
dapat menampilkan dokumen yang sama lebih dari satu kali dalam kumpulan hasil.