Definición
$sampleRateCoincide con una selección aleatoria de documentos de entrada. El número de documentos seleccionados se aproxima a la tasa de muestra expresada como un porcentaje del total de documentos.
La
$sampleRateel operador tiene la siguiente sintaxis:{ $sampleRate: <non-negative float> }
Comportamiento
El proceso de selección utiliza una distribución aleatoria uniforme. La tasa de muestreo es un número de punto flotante entre 0 y 1, inclusive, que representa la probabilidad de que un documento dado sea seleccionado a medida que pasa por la 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 usar el/la $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.
Ejemplos
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 }