Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
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 etapa:

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

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

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

  • $sample es la primera etapa de la pipeline.

  • N es 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 N documentos. 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 $sample en una vista, MongoDB añade la etapa al final de la sintaxis del pipeline de agregación de la vista. En consecuencia, la etapa $sample en 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.

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.

Tip

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;

Volver

$replaceWith

En esta página