Pada MongoDB 3.4.9, sebagian dari alasan bias yang Anda amati adalah $sample
hampir seluruhnya bergantung pada implementasi kursor acak mesin penyimpanan (lihat SERVER-19183
). Hal ini dilakukan agar $sample
bisa menjadi performan ketika koleksi berisi banyak data. Namun, karena mesin penyimpanan menyimpan dokumen dalam urutan yang diurutkan menggunakan implementasi tipe B-tree, tidak selalu memungkinkan untuk membuat hasil yang benar-benar acak.
Saat ini ada dua permintaan fitur untuk $sample
yang lebih baik mekanik, yaitu SERVER-22069
dan SERVER-22068
.
Karena itu, jika Anda memerlukan sampel data yang benar-benar tidak bias, gulung $sample
Anda sendiri -seperti solusi kemungkinan merupakan cara terbaik untuk melanjutkan pada saat ini. Sesuatu seperti:
- Dapatkan daftar semua
_id
dalam koleksi. - Lakukan pengambilan sampel acak pada daftar ini (mis. menggunakan acak dari Python .pilihan ).
- Dapatkan semua dokumen yang relevan menggunakan sampel
_id
, yang akan cukup berkinerja tergantung pada ukuran sampel yang Anda inginkan, karena_id
selalu diindeks.