Definição
$sampleNovo na versão 3.2.
Seleciona aleatoriamente o número especificado de documentos a partir dos documentos de entrada.
$samplesintaxe de estágio :{ $sample: { size: <positive integer N> } } Né o número de documentos para selecionar aleatoriamente. DefinaNcomo 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.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
Ndocumentos. As classificações aleatórias estão sujeitas àsrestrições de memória de classificação .Observação
As visualizações são o resultado de pipelines de agregação. Quando você usa
$sampleem 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$sampleem 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.