sql >> Databáze >  >> NoSQL >> MongoDB

Náhodný vzorek z MongoDB vrací silně zkreslené výsledky

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:

  1. Získejte seznam všech _id ve sbírce.
  2. Proveďte náhodné vzorkování tohoto seznamu (např. pomocí Pythonu náhodné .volba ).
  3. 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.



  1. Mongo Copy Collection a uživatelská oprávnění

  2. Rozdíl mezi count() a find().count() v MongoDB

  3. Připojení objektu blob stránky jako VHD v dávkovém souboru

  4. MongoDB a Mongoose přistupují k jedné databázi při ověřování proti jiné (NodeJS, Mongoose)