Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

$sample (agregação)

Nesta página

  • Definição
  • Comportamento
  • Exemplo
$sample

Seleciona aleatoriamente o número especificado de documentos a partir dos documentos de entrada.

$sample sintaxe de estágio :

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

N é o número de documentos para selecionar aleatoriamente. Defina N como um número inteiro maior ou igual a 1.

Se todas as seguintes condições forem verdadeiras, o $sample usará um cursor pseudoaleatório para selecionar os documentos N:

  • $sample é o primeiro estágio do pipeline.

  • N é inferior a 5% do total de documentos na coleção.

    Observação

    Não é possível configurar o limite que $sample usa para determinar quando fazer a varredura de toda a coleção. Os limites são 5%. Se o tamanho for maior que 5% do número total de documentos na collection, $sample executará uma classificaçãotop-k por um valor aleatório gerado. A classificação top-k pode ser transferido para o disco se os documentos de amostra forem maiores que 100MB.

  • A coleção contém mais de 100 documentos.

Se qualquer uma das condições anteriores for falsa, $sample:

  • Lê todos os documentos gerados de um estágio de agregação anterior ou de uma varredura de coleção.

  • Executa uma classificação aleatória para selecionar N documentos. As classificações aleatórias estão sujeitas às restrições de memória de classificação.

    Observação

    As visualizações são o resultado de pipelines de agregação. Quando você usa $sample em um modo de exibição, o MongoDB acrescenta o estágio ao final da sintaxe do pipeline de agregação do modo de exibição. Portanto, o estágio $sample em uma exibição nunca é o primeiro estágio e sempre resulta em uma varredura de coleção.

Se você usar $sample em um cluster fragmentado, cada shard executará a operação de amostra de forma independente. mongos amostra o resultado mesclado de cada operação de amostra de shard e retorna o número solicitado de documentos.

Esta seção mostra um exemplo de pipeline de agregação que usa a seguinte coleção 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 }
] )

A seguinte operação de agregação seleciona aleatoriamente 3 documentos da coleção:

db.users.aggregate(
[ { $sample: { size: 3 } } ]
)

A operação retorna três documentos aleatórios.

Dica

Veja também:

Voltar

$replaceWith