sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB $tasa de muestra

En MongoDB, el $sampleRate etapa de canalización de agregación coincide con una selección aleatoria de documentos de entrada.

El número de documentos seleccionados se aproxima a la frecuencia de muestreo expresada como porcentaje del número total de documentos.

El $sampleRate El operador se introdujo en MongoDB 4.4.2.

Cuando usas $sampleRate , proporcione la frecuencia de muestreo como un número de coma flotante entre 0 y 1 . El proceso de selección utiliza una distribución aleatoria uniforme, y la frecuencia de muestreo que proporciona representa la probabilidad de que un documento determinado sea seleccionado a medida que pasa por la canalización.

Ejemplo

Supongamos que tenemos una colección llamada employees con los siguientes 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 el $sample etapa para seleccionar aleatoriamente un número específico de documentos de esa colección.

Ejemplo:

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 }

Proporcionando una frecuencia de muestreo de 0.33 , especificamos que se debe devolver aproximadamente un tercio de los documentos.

Sin embargo, el resultado real puede variar significativamente, dependiendo de cuántos documentos haya en la colección. Las colecciones con un número menor de documentos tendrán resultados bastante variados, mientras que las colecciones más grandes deberían estar más cerca de la distribución aleatoria uniforme esperada.

Para demostrar esto, este es el conjunto de resultados que obtengo cuando vuelvo a ejecutar el mismo código:

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

Y de nuevo:

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

Y una vez más:

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

Esta es una colección más pequeña, por lo que los resultados varían significativamente.

Si necesita que se devuelva una cantidad exacta de documentos, use el $sample escenario en su lugar.