Definição
$sampleSeleciona 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.
Exemplos
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.
Para usar o driver MongoDB .NET/C# para adicionar um estágio $sample a um pipeline de agregação, chame o método Sample() em um objeto PipelineDefinition.
O exemplo abaixo cria um estágio de pipeline que retorna cinco documentos aleatórios da collection de entrada:
var pipeline = new EmptyPipelineDefinition<Movie>() .Sample(5);
Para usar o driver Node.js do MongoDB para adicionar um estágio $sample a um pipeline de agregação , use o operador $sample em um objeto de pipeline.
O exemplo a seguir cria um estágio de pipeline que retorna cinco documentos aleatórios da collection de entrada. Em seguida, o exemplo executa o agregação pipeline:
const pipeline = [{ $sample: { size: 5 } }]; const cursor = collection.aggregate(pipeline); return cursor;