Fra MongoDB 3.4.9 er en del af årsagen til den skævhed, du har observeret, at $sample bygger næsten udelukkende på lagermotorens tilfældige markørimplementering (se SERVER-19183
). Dette gøres så $sample kunne være effektiv, når samlingen indeholder mange data. Men da lagringsmotoren gemmer dokumenter i en sorteret rækkefølge ved hjælp af en B-træ-implementering, er det ikke altid muligt at skabe et virkelig tilfældigt resultat.
Der er i øjeblikket to funktionsanmodninger om bedre $sample mekanik, nemlig SERVER-22069
og SERVER-22068
.
Når det er sagt, hvis du har brug for en virkelig upartisk prøve af dine data, ruller du din egen $sample -lignende løsning er sandsynligvis den bedste måde at fortsætte på dette tidspunkt. Noget som:
- Få en liste over alle
_idi samlingen. - Udfør en tilfældig stikprøve på denne liste (f.eks. brug Pythons tilfældige .choice ).
- Hent alle de relevante dokumenter ved hjælp af den samplede
_id, hvilket vil være rimeligt effektivt afhængigt af den prøvestørrelse, du ønsker, da_ider altid indekseret.