Definición
$sampleSelecciona 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.
Ejemplos
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.
Para utilizar el driver MongoDB .NET/C# para agregar una etapa de $sample muestra a un pipeline 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 pipeline que devuelve cinco documentos aleatorios de la colección de entrada. El ejemplo luego ejecuta la canalización de agregación:
const pipeline = [{ $sample: { size: 5 } }]; const cursor = collection.aggregate(pipeline); return cursor;