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.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.
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;