Docs Menu
Docs Home
/ /

$sampleRate (agregación)

$sampleRate

Coincide con una selección aleatoria de documentos de entrada. El número de documentos seleccionados se aproxima a la tasa de muestreo, expresada como porcentaje del número total de documentos.

El $sampleRate El operador tiene la siguiente sintaxis:

{ $sampleRate: <non-negative float> }

El proceso de selección utiliza una distribución aleatoria uniforme. La frecuencia de muestreo es un número de punto flotante entre 0 y 1, ambos inclusive, que representa la probabilidad de que un documento determinado sea seleccionado al pasar por el pipeline.

Por ejemplo, una frecuencia de muestreo de 0.33 selecciona aproximadamente un documento de cada tres.

Esta expresión:

{ $match: { $sampleRate: 0.33 } }

es equivalente a utilizar el $rand operador de la siguiente manera:

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

Las ejecuciones repetidas con los mismos datos producirán resultados diferentes, ya que el proceso de selección no es determinista. En general, los conjuntos de datos más pequeños mostrarán mayor variabilidad en el número de documentos seleccionados en cada ejecución. A medida que aumenta el tamaño de la colección, el número de documentos seleccionados se acercará al valor esperado para una distribución aleatoria uniforme.

Nota

Si se requiere un número exacto de documentos de cada ejecución,$sample se debe utilizar el operador en lugar $sampleRate de.

Este código crea una pequeña colección con 100 documentos.

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

El operador $sampleRate se puede usar en una secuencia de comandos para seleccionar documentos aleatorios de la colección. En este ejemplo, usamos $sampleRate para seleccionar aproximadamente un tercio de los documentos.

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

Esta es la salida de 5 ejecuciones en la colección de muestra:

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

Tip

  • $sample

  • $rand

Volver

$rtrim

En esta página