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

MongoDB $ sampleRate

In MongoDB, il $sampleRate la fase della pipeline di aggregazione corrisponde a una selezione casuale di documenti di input.

Il numero di documenti selezionati approssima la frequenza di campionamento espressa come percentuale del numero totale di documenti.

Il $sampleRate operatore è stato introdotto in MongoDB 4.4.2.

Quando usi $sampleRate , fornisci la frequenza di campionamento come numero in virgola mobile compreso tra 0 e 1 . Il processo di selezione utilizza una distribuzione casuale uniforme e la frequenza di campionamento fornita rappresenta la probabilità che un determinato documento venga selezionato mentre passa attraverso la pipeline.

Esempio

Supponiamo di avere una collezione chiamata employees con i seguenti documenti:

{ "_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 }

Possiamo usare il $sample fase per selezionare casualmente un numero specificato di documenti da quella raccolta.

Esempio:

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

Risultato:

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

Fornendo una frequenza di campionamento di 0.33 , abbiamo specificato che circa un terzo dei documenti deve essere restituito.

Tuttavia, il risultato effettivo può variare in modo significativo, a seconda di quanti documenti ci sono nella collezione. Le raccolte con un numero inferiore di documenti avranno risultati piuttosto vari, mentre le raccolte più grandi dovrebbero essere più vicine alla distribuzione casuale uniforme prevista.

Per dimostrarlo, ecco il set di risultati che ottengo quando eseguo di nuovo lo stesso codice:

{ "_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 }

E ancora:

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

E ancora:

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

Questa è una raccolta più piccola, quindi i risultati variano in modo significativo.

Se hai bisogno di un numero esatto di documenti da restituire, usa il $sample scena invece.