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
_iddalam 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_idselalu diindeks.