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
_id
ve 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_id
je vždy indexováno.