sql >> Database teknologi >  >> NoSQL >> MongoDB

Tilfældig stikprøve fra MongoDB returnerer stærkt skæve resultater

Fra MongoDB 3.4.9 er en del af årsagen til den skævhed, du har observeret, at $sample bygger næsten udelukkende på lagermotorens tilfældige markørimplementering (se SERVER-19183 ). Dette gøres så $sample kunne være effektiv, når samlingen indeholder mange data. Men da lagringsmotoren gemmer dokumenter i en sorteret rækkefølge ved hjælp af en B-træ-implementering, er det ikke altid muligt at skabe et virkelig tilfældigt resultat.

Der er i øjeblikket to funktionsanmodninger om bedre $sample mekanik, nemlig SERVER-22069 og SERVER-22068 .

Når det er sagt, hvis du har brug for en virkelig upartisk prøve af dine data, ruller du din egen $sample -lignende løsning er sandsynligvis den bedste måde at fortsætte på dette tidspunkt. Noget som:

  1. Få en liste over alle _id i samlingen.
  2. Udfør en tilfældig stikprøve på denne liste (f.eks. brug Pythons tilfældige .choice ).
  3. Hent alle de relevante dokumenter ved hjælp af den samplede _id , hvilket vil være rimeligt effektivt afhængigt af den prøvestørrelse, du ønsker, da _id er altid indekseret.



  1. Redis, vil et emne (pub/sub) altid blive leveret til mindst én abonnent?

  2. Udsnit med projektion med C#

  3. mongodb og autentificere og pas i node.js

  4. Hvad er gode måder at få aktuelle brugerdetaljer på i modeller?