sql >> Databasteknik >  >> NoSQL >> MongoDB

Slumpmässigt urval från MongoDB ger kraftigt skeva resultat

Från och med MongoDB 3.4.9 är en del av orsaken till den fördom du har observerat att $sample förlitar sig nästan helt på lagringsmotorns slumpmässiga markörimplementering (se SERVER-19183 ). Detta görs så att $sample skulle kunna fungera när samlingen innehåller mycket data. Men eftersom lagringsmotorn lagrar dokument i en sorterad ordning med en implementering av B-trädtyp, är det inte alltid möjligt att skapa ett verkligt slumpmässigt resultat.

Det finns för närvarande två funktionsförfrågningar för bättre $sample mekanik, nämligen SERVER-22069 och SERVER-22068 .

Med det sagt, om du behöver ett verkligt objektivt urval av dina data, rulla ditt eget $sample -liknande lösning är troligen det bästa sättet att gå vidare vid denna tidpunkt. Något i stil med:

  1. Få en lista över alla _id i samlingen.
  2. Utför ett slumpmässigt urval på den här listan (t.ex. med Pythons slumpmässiga .choice ).
  3. Hämta alla relevanta dokument med hjälp av den provade _id , som kommer att fungera rimligt beroende på vilken urvalsstorlek du vill ha, eftersom _id är alltid indexerad.



  1. Apache-Nifi :Ta bort MongoDB-samlingar

  2. Tillvägagångssätt för säkerhetskopiering och katastrofåterställning i HBase

  3. Frågedata visas inte i zf2?

  4. MongoDB verkar välja fel index när man gör aggregering