Vanaf MongoDB 3.4.9 is een deel van de reden voor de vooringenomenheid die je hebt waargenomen dat $sample
is bijna volledig afhankelijk van de willekeurige cursorimplementatie van de opslagengine (zie SERVER-19183
). Dit wordt gedaan zodat $sample
kan performant zijn wanneer de verzameling veel gegevens bevat. Omdat de opslagengine echter documenten in een gesorteerde volgorde opslaat met behulp van een B-tree-type implementatie, is het niet altijd mogelijk om een echt willekeurig resultaat te creëren.
Er zijn momenteel twee functieverzoeken voor betere $sample
mechanica, namelijk SERVER-22069
en SERVER-22068
.
Dat gezegd hebbende, als u echt onbevooroordeelde voorbeelden van uw gegevens nodig heeft, kunt u uw eigen $sample
-achtige oplossing is waarschijnlijk de beste manier om op dit punt verder te gaan. Iets als:
- Krijg een lijst van alle
_id
in de collectie. - Voer een willekeurige steekproef uit op deze lijst (bijvoorbeeld met behulp van Python's willekeurig .keuze ).
- Verkrijg alle relevante documenten met behulp van de voorbeeld
_id
, die redelijk zal presteren, afhankelijk van de gewenste steekproefomvang, aangezien_id
wordt altijd geïndexeerd.