$sample (agregação)
Nesta página
Definição
$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. DefinaN
como um número inteiro maior ou igual a1
.
Comportamento
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 fragmento executará a operação de amostra de forma independente. mongos
faz uma amostra do resultado mesclado da operação de amostragem de cada fragmento e retorna o número solicitado de documentos.
Exemplo
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.