От MongoDB 3.4.9, част от причината за отклонението, което наблюдавате, е, че $sample
разчита почти изцяло на внедряването на случаен курсор на системата за съхранение (вижте SERVER-19183
). Това се прави така, че $sample
може да бъде ефективна, когато колекцията съдържа много данни. Въпреки това, тъй като механизмът за съхранение съхранява документи в сортиран ред, използвайки реализация от тип B-дърво, не винаги е възможно да се създаде наистина случаен резултат.
В момента има две искания за функции за по-добро $sample
механика, а именно SERVER-22069
и SERVER-22068
.
Като каза това, ако се нуждаете от наистина безпристрастни проби от вашите данни, превъртете свой собствен $sample
-like решение вероятно е най-добрият начин да продължите в този момент. Нещо като:
- Вземете списък с всички
_id
в колекцията. - Извършете произволна извадка от този списък (напр. с помощта на случаен метод на Python .избор ).
- Получете всички съответни документи, като използвате примерния
_id
, което ще бъде разумно ефективно в зависимост от размера на извадката, който искате, тъй като_id
винаги се индексира.