Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

$sampleRate (agregação)

Nesta página

  • Definição
  • Comportamento
  • Exemplos
$sampleRate

Corresponde a uma seleção aleatória de documentos de entrada. O número de documentos selecionados aproxima a taxa de amostragem expressa como uma porcentagem do número total de documentos.

O operador $sampleRate tem a seguinte sintaxe:

{ $sampleRate: <non-negative float> }

O processo de seleção utiliza uma distribuição aleatória uniforme. A taxa de amostragem é um número de ponto flutuante entre 0 e 1, inclusive, que representa a probabilidade de que um determinado documento seja selecionado à medida que passa pelo pipeline.

Por exemplo, uma taxa de amostragem de 0.33 seleciona aproximadamente um documento em três.

Esta expressão:

{ $match: { $sampleRate: 0.33 } }

é equivalente a usar o operador $rand da seguinte forma:

{ $match: { $expr: { $lt: [ { $rand: {} }, 0.33 ] } } }

Execuções repetidas nos mesmos dados produzirão resultados diferentes, pois o processo de seleção não é determinístico. Em geral, conjuntos de dados menores mostrarão mais variabilidade no número de documentos selecionados em cada execução. À medida que o tamanho da collection aumenta, o número de documento escolhidos se aproximará do valor esperado para uma distribuição aleatória uniforme.

Observação

Se um número exato de documentos for exigido de cada execução, o operador $sample deverá ser usado em vez de $sampleRate.

Este código cria uma pequena coleção com 100 documentos.

N = 100
bulk = db.collection.initializeUnorderedBulkOp()
for ( i = 0; i < N; i++) { bulk.insert( {_id: i, r: 0} ) }
bulk.execute()

O operador $sampleRate pode ser usado em um pipeline para selecionar documento aleatórios da collection. Neste exemplo, usamos $sampleRate para selecionar cerca de um terceiro dos documentos.

db.collection.aggregate(
[
{ $match: { $sampleRate: 0.33 } },
{ $count: "numMatches" }
]
)

Este é o resultado de 5 execuções na collection de amostras:

{ "numMatches" : 38 }
{ "numMatches" : 36 }
{ "numMatches" : 29 }
{ "numMatches" : 29 }
{ "numMatches" : 28 }

Dica

Veja também:

← $rtrim (agregação)