Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

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

    Nota

    No puede configurar el umbral que $sample utiliza para determinar cuándo escanear toda la colección. El umbral es del 5%. Si el tamaño es superior al 5% del número total de documentos de la colección, $sample realiza una top-k ordenación por un valor aleatorio generado. La ordenación top-k podría desbordarse en el disco si los documentos de muestra superan los 100MB.

  • La colección contiene más de 100 documentos.

El cursor pseudoaleatorio no da garantías de una muestra aleatoria uniforme. Selecciona documentos descendiendo aleatoriamente la estructura interna B-tree de la colección, por lo que los resultados pueden sesgarse hacia algunas partes de la colección. Es más probable que haya sesgo cuando:

  • Los documentos de la colección no están distribuidos uniformemente, lo que lleva a una estructura de árbol desequilibrada.

  • La colección tiene un número elevado de documentos borrados.

  • Un gran número de documentos no están visibles para la transacción del cursor.

Si su caso de uso requiere una muestra uniforme, evite el cursor pseudoaleatorio. Para ello, ejecute $sample después de otra etapa, o establezca N en más del 5% de los documentos de la colección.

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 restricciones de memoria de la ordenación.

    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.

Califique esta página