Definición
$sampleSelecciona aleatoriamente la cantidad especificada de documentos de los documentos de entrada.
$sampleSintaxis de la etapa:{ $sample: { size: <positive integer N> } } Nes el número de documentos que se seleccionarán aleatoriamente. EstablezcaNen un entero mayor o igual a1.
Comportamiento
Si se cumplen todas las siguientes condiciones, $sample utiliza un cursor pseudoaleatorio para seleccionar los documentos N:
$samplees la primera etapa del oleoducto.Nes menos del 5% del total de documentos de la colección.Nota
No se puede configurar el umbral que usa para determinar cuándo escanear toda la colección. El umbral es
$sampledel 5%. Si el tamaño es mayor que 5el % del número total de documentos de la colección, realiza$sampleun Ordenacióntop-k por un valor aleatorio generado. Esta ordenación podría afectar al disco si los documentos de muestra superan los 100MB.La colección contiene más de 100 documentos.
Si alguna de las condiciones anteriores es$sample falsa,:
Lee todos los documentos que surgen de una etapa de agregación anterior o de un escaneo de recopilación.
Realiza una ordenación aleatoria para seleccionar
Ndocumentos. Las ordenaciones aleatorias están sujetas a las restricciones de memoria de ordenación.Nota
Lasvistas son el resultado de las canalizaciones de agregación. Al usar
$sampleen una vista, MongoDB añade la etapa al final de la sintaxis de la canalización de agregación de la vista. Por lo tanto, la$sampleetapa de una vista nunca es la primera etapa y siempre resulta en un análisis de colección.
Si utiliza $sample en un clúster fragmentado, cada fragmento realiza la operación de muestra de forma independiente. mongos muestrea el resultado fusionado de la operación de muestra de cada fragmento y devuelve la cantidad de documentos solicitada.
Ejemplos
Esta sección muestra un ejemplo de canalización de agregación que utiliza la siguiente colección users:
db.users.insertMany( [ { _id : 1, name : "dave123", q1 : true, q2 : true }, { _id : 2, name : "dave2", q1 : false, q2 : false }, { _id : 3, name : "ahn", q1 : true, q2 : true }, { _id : 4, name : "li", q1 : true, q2 : false }, { _id : 5, name : "annT", q1 : false, q2 : true }, { _id : 6, name : "li", q1 : true, q2 : true }, { _id : 7, name : "ty", q1 : false, q2 : true } ] )
La siguiente operación de agregación selecciona aleatoriamente 3 documentos de la colección:
db.users.aggregate( [ { $sample: { size: 3 } } ] )
La operación devuelve tres documentos aleatorios.
Para usar el controlador MongoDB.NET/C# para agregar una $sample etapa a una canalización de agregación, llame a Sample()método en un PipelineDefinition objeto.
El siguiente ejemplo crea una etapa de canalización que devuelve cinco documentos aleatorios de la colección de entrada:
var pipeline = new EmptyPipelineDefinition<Movie>() .Sample(5);
Para utilizar el controlador de MongoDB Node.js para agregar una etapa de $sample a una canalización de agregación, utilice el Operador $sample en un objeto de canalización.
El siguiente ejemplo crea una etapa de canalización que devuelve cinco documentos aleatorios de la colección de entrada. A continuación, ejecuta la canalización de agregación:
const pipeline = [{ $sample: { size: 5 } }]; const cursor = collection.aggregate(pipeline); return cursor;