Docs Menu
Docs Home
/ /

$sample (etapa de agregación)

$sample

Selecciona aleatoriamente la cantidad especificada de documentos de los documentos de entrada.

$sample Sintaxis de la etapa:

{ $sample: { size: <positive integer N> } }

N es el número de documentos que se seleccionarán aleatoriamente. Establezca N en un entero mayor o igual a 1.

Si se cumplen todas las siguientes condiciones, $sample utiliza un cursor pseudoaleatorio para seleccionar los documentos N:

  • $sample es la primera etapa del oleoducto.

  • N es 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 $sample del 5%. Si el tamaño es mayor que 5el % del número total de documentos de la colección, realiza$sample un 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 N documentos. 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 $sample en 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 $sample etapa 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.

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.

Tip

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;

Volver

$replaceWith

En esta página