sql >> Database >  >> NoSQL >> MongoDB

Willekeurige steekproef van MongoDB die sterk scheve resultaten oplevert

Vanaf MongoDB 3.4.9 is een deel van de reden voor de vooringenomenheid die je hebt waargenomen dat $sample is bijna volledig afhankelijk van de willekeurige cursorimplementatie van de opslagengine (zie SERVER-19183 ). Dit wordt gedaan zodat $sample kan performant zijn wanneer de verzameling veel gegevens bevat. Omdat de opslagengine echter documenten in een gesorteerde volgorde opslaat met behulp van een B-tree-type implementatie, is het niet altijd mogelijk om een ​​echt willekeurig resultaat te creëren.

Er zijn momenteel twee functieverzoeken voor betere $sample mechanica, namelijk SERVER-22069 en SERVER-22068 .

Dat gezegd hebbende, als u echt onbevooroordeelde voorbeelden van uw gegevens nodig heeft, kunt u uw eigen $sample -achtige oplossing is waarschijnlijk de beste manier om op dit punt verder te gaan. Iets als:

  1. Krijg een lijst van alle _id in de collectie.
  2. Voer een willekeurige steekproef uit op deze lijst (bijvoorbeeld met behulp van Python's willekeurig .keuze ).
  3. Verkrijg alle relevante documenten met behulp van de voorbeeld _id , die redelijk zal presteren, afhankelijk van de gewenste steekproefomvang, aangezien _id wordt altijd geïndexeerd.



  1. Hoe te matchen op samengevoegde collecties met Laravel en MongoDB?

  2. Node mongodb:Fout:verbinding gesloten vanwege parseError

  3. MongoDB - Fout:ongeldig schema, verwachte mongodb

  4. IdMemberMap is null met behulp van Representation Serialization Options