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

MongoDB $sampleRate

I MongoDB er $sampleRate aggregeringspipelinestadiet matcher et tilfældigt udvalg af inputdokumenter.

Antallet af valgte dokumenter tilnærmer sig stikprøvefrekvensen udtrykt som en procentdel af det samlede antal dokumenter.

$sampleRate operatør blev introduceret i MongoDB 4.4.2.

Når du bruger $sampleRate , angiver du samplefrekvensen som et flydende kommatal mellem 0 og 1 . Udvælgelsesprocessen bruger en ensartet tilfældig fordeling, og den stikprøvefrekvens, du angiver, repræsenterer sandsynligheden for, at et givet dokument vil blive udvalgt, når det passerer gennem pipelinen.

Eksempel

Antag, at vi har en samling kaldet employees med følgende dokumenter:

{ "_id" : 1, "name" : "Bob", "salary" : 55000 }
{ "_id" : 2, "name" : "Sarah", "salary" : 128000 }
{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }
{ "_id" : 4, "name" : "Christopher", "salary" : 45000 }
{ "_id" : 5, "name" : "Beck", "salary" : 82000 }
{ "_id" : 6, "name" : "Homer", "salary" : 1 }
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }
{ "_id" : 8, "name" : "Zoro", "salary" : 300000 }
{ "_id" : 9, "name" : "Xena", "salary" : 382000 }

Vi kan bruge $sample trin for tilfældigt at vælge et bestemt antal dokumenter fra den samling.

Eksempel:

db.employees.aggregate(
   [
      { 
        $match: { $sampleRate: 0.33 } 
      }
   ]
)

Resultat:

{ "_id" : 1, "name" : "Bob", "salary" : 55000 }
{ "_id" : 6, "name" : "Homer", "salary" : 1 }
{ "_id" : 8, "name" : "Zoro", "salary" : 300000 }

Ved at give en samplerate på 0.33 , specificerede vi, at omkring en tredjedel af dokumenterne skulle returneres.

Det faktiske resultat kan dog variere ganske betydeligt, alt efter hvor mange dokumenter der er i samlingen. Samlinger med et mindre antal dokumenter vil have ret varierede resultater, hvorimod større samlinger burde være tættere på den forventede ensartede tilfældige fordeling.

For at demonstrere dette er her det resultatsæt, jeg får, når jeg kører den samme kode igen:

{ "_id" : 2, "name" : "Sarah", "salary" : 128000 }
{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }
{ "_id" : 4, "name" : "Christopher", "salary" : 45000 }
{ "_id" : 5, "name" : "Beck", "salary" : 82000 }
{ "_id" : 6, "name" : "Homer", "salary" : 1 }
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }

Og igen:

{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }
{ "_id" : 8, "name" : "Zoro", "salary" : 300000 }

Og endnu en gang:

{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }
{ "_id" : 6, "name" : "Homer", "salary" : 1 }
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }

Dette er en mindre samling, så resultaterne varierer ganske betydeligt.

Hvis du har brug for et nøjagtigt antal dokumenter, der skal returneres, skal du bruge $sample scene i stedet.


  1. Spring Data Redis Expire Key

  2. Henter HTML fra MongoDB til brug i skabelon

  3. Mongodb samler (tæller) på flere felter samtidigt

  4. Spring Boot Integration Test med Embedded MongoDB