$rand
Nesta página
Definição
Retorna um número de ponto flutuante pseudo-aleatório no intervalo [0, 1). 0 incluído, 1 está excluído.
Sintaxe
$rand
tem a seguinte sintaxe:
{ $rand: {} }
Exemplos
Gerar Pontos de Dados Aleatórios
Os exemplos nesta seção ilustram doações beneficentes. A seguinte coleção contém uma lista de doadores:
db.donors.insertMany( [ { donorId: 1000, amount: 0, frequency: 1 }, { donorId: 1001, amount: 0, frequency: 2 }, { donorId: 1002, amount: 0, frequency: 1 }, { donorId: 1003, amount: 0, frequency: 2 }, { donorId: 1004, amount: 0, frequency: 1 } ] )
O exemplo a seguir atualiza cada documento na collection donors
com um valor de doação aleatório:
db.donors.updateMany( {}, [ { $set: { amount: { $floor: { $multiply: [ { $rand: {} }, 100 ] } } } } ] )
O filtro de atualização vazio corresponde a todos os documentos na coleção.
Para cada documento , geramos um valor entre 0 e 1 usando $rand
e, em seguida, escalonamos o valor com $multiply
.
O operador $floor
remove a parte decimal para que o amount
atualizado seja um valor inteiro.
Depois de atualizar a coleção, os documentos ficam assim:
{ "donorId" : 1000, "amount" : 2, "frequency" : 1 } { "donorId" : 1001, "amount" : 58, "frequency" : 2 } { "donorId" : 1002, "amount" : 27, "frequency" : 1 } { "donorId" : 1003, "amount" : 26, "frequency" : 2 } { "donorId" : 1004, "amount" : 42, "frequency" : 1 }
Selecionar itens aleatórios de uma coleção
O operador $rand
pode ser usado para selecionar documentos aleatórios de uma coleção. Dada uma coleção de registros eleitorais:
db.voters.insertMany( [ { name: "Archibald", voterId: 4321, district: 3, registered: true }, { name: "Beckham", voterId: 4331, district: 3, registered: true }, { name: "Carolin", voterId: 5321, district: 4, registered: true }, { name: "Debarge", voterId: 4343, district: 3, registered: false }, { name: "Eckhard", voterId: 4161, district: 3, registered: false }, { name: "Faberge", voterId: 4300, district: 1, registered: true }, { name: "Grimwald", voterId: 4111, district: 3, registered: true }, { name: "Humphrey", voterId: 2021, district: 3, registered: true }, { name: "Idelfon", voterId: 1021, district: 4, registered: true }, { name: "Justo", voterId: 9891, district: 3, registered: false } ] )
A seguinte query recupera uma seleção aleatória de aproximadamente metade dos eleitores no distrito 3:
db.voters.find( { district: 3, $expr: { $lt: [0.5, {$rand: {} } ] } }, { _id: 0, name: 1, registered: 1 } )
A partida inicial no campo district
seleciona documentos em que o eleitor é do distrito 3.
O operador $expr
utiliza $rand
para refinar ainda mais a operação find
. Para cada documento, o $rand
gera um valor entre 0 e 1. O limite de 0.5
significa que a comparação inferior a ($lt)
será verdadeira para cerca de metade dos documentos no conjunto.
Há 7 eleitores no Distrito 3, executando o código seleciona cerca de metade deles.
{ "name" : "Beckham", "registered" : true } { "name" : "Eckhard", "registered" : false } { "name" : "Grimwald", "registered" : true } { "name" : "Humphrey", "registered" : true }