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
_id
i 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_id
er altid indekseret.