Definición
$sampleNuevo en la versión 3.2.
Selecciona 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.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 la ordenar restricciones de memoria.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.
Ejemplo
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.