Definición
$sampleNovedad en la versión 3.2.
Selecciona aleatoriamente la cantidad especificada de documentos de los documentos de entrada.
$samplesintaxis de etapa:{ $sample: { size: <positive integer N> } } Nes el número de documentos a seleccionar aleatoriamente. ConfiguraNen un número entero mayor o igual que1.
Comportamiento
Si se cumplen todas las siguientes condiciones, $sample utiliza un cursor pseudoaleatorio para seleccionar los documentos N:
$samplees la primera etapa de la pipeline.Nes menos del 5% de los documentos totales de la colección.La colección contiene más de 100 documentos.
Si alguna de las condiciones anteriores es falsa, $sample:
Lee todos los documentos que se obtienen de una etapa de agregación anterior o de un escaneo de colección.
Realiza una ordenación aleatoria para seleccionar
Ndocumentos. Las ordenaciones aleatorias están sujetas a las ordenar restricciones de memoria.Nota
Las vistas son el resultado de pipelines de agregación. Cuando utiliza
$sampleen una vista, MongoDB añade la etapa al final de la sintaxis del pipeline de agregación de la vista. En consecuencia, la etapa$sampleen una vista nunca es la primera y siempre resulta en un escaneo de colección.
Si usas $sample en un clúster fragmentado, cada partición realiza la operación de muestreo de forma independiente. mongos toma muestras del resultado combinado de la operación de muestreo de cada partición y devuelve el número solicitado de documentos.
Ejemplo
Esta sección muestra un ejemplo de un pipeline de agregación que utiliza la siguiente colección de 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.