MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB $sampleRate


No MongoDB, o $sampleRate estágio de pipeline de agregação corresponde a uma seleção aleatória de documentos de entrada.

O número de documentos selecionados se aproxima da taxa de amostragem expressa como uma porcentagem do número total de documentos.

A $sampleRate O operador foi introduzido no MongoDB 4.4.2.

Quando você usa $sampleRate , você fornece a taxa de amostragem como um número de ponto flutuante entre 0 e 1 . O processo de seleção usa uma distribuição aleatória uniforme e a taxa de amostragem que você fornece representa a probabilidade de um determinado documento ser selecionado ao passar pelo pipeline.

Exemplo


Suponha que tenhamos uma coleção chamada employees com os seguintes documentos:
{ "_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 }

Podemos usar o $sample etapa para selecionar aleatoriamente um número especificado de documentos dessa coleção.

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

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

Ao fornecer uma taxa de amostragem de 0.33 , especificamos que aproximadamente um terço dos documentos deve ser devolvido.

No entanto, o resultado real pode variar bastante, dependendo de quantos documentos estão na coleção. Coleções com um número menor de documentos terão resultados bastante variados, enquanto coleções maiores devem estar mais próximas da distribuição aleatória uniforme esperada.

Para demonstrar isso, aqui está o conjunto de resultados que recebo quando executo o mesmo código novamente:
{ "_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 de novo:
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }
{ "_id" : 8, "name" : "Zoro", "salary" : 300000 }

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

Esta é uma coleção menor e, portanto, os resultados variam bastante.

Se você precisar que um número exato de documentos seja devolvido, use o $sample palco em vez disso.