Od MongoDB 3.4.9 je jedním z důvodů zaujatosti, kterou jste pozorovali, to, že $sample spoléhá téměř výhradně na implementaci náhodného kurzoru úložiště (viz SERVER-19183
). To se děje tak, že $sample může být výkonná, když kolekce obsahuje velké množství dat. Protože však úložiště ukládá dokumenty v setříděném pořadí pomocí implementace typu B-strom, není vždy možné vytvořit skutečně náhodný výsledek.
Aktuálně existují dva požadavky na lepší $sample mechanika, konkrétně SERVER-22069
a SERVER-22068
.
Pokud však požadujete skutečně nezaujaté vzorky vašich dat, použijte svůj vlastní $sample -podobné řešení je pravděpodobně nejlepší způsob, jak v tomto bodě pokračovat. Něco jako:
- Získejte seznam všech
_idve sbírce. - Proveďte náhodné vzorkování tohoto seznamu (např. pomocí Pythonu náhodné .volba ).
- Získejte všechny relevantní dokumenty pomocí vzorového
_id, který bude přiměřeně výkonný v závislosti na požadované velikosti vzorku, protože_idje vždy indexováno.