Definición
Devuelve un número de punto flotante pseudoaleatorio en el intervalo [0, 1). 0 está incluido, 1 está excluido.
Sintaxis
$rand tiene la siguiente sintaxis:
{ $rand: {} }
Ejemplos
Generar puntos de datos aleatorios
Los ejemplos de esta sección ilustran donaciones benéficas. La siguiente colección contiene una lista de donantes:
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 } ] )
El siguiente ejemplo actualiza cada documento de la colección donors con un monto de donación aleatorio:
db.donors.updateMany( {}, [ { $set: { amount: { $floor: { $multiply: [ { $rand: {} }, 100 ] } } } } ] )
El filtro de actualización vacío coincide con todos los documentos de la colección.
Para cada documento generamos un valor entre 0 y 1 usando $rand y luego escalamos el valor con $multiply.
El operador elimina la parte decimal, por lo que el $floor actualizado amount es un valor entero.
Después de actualizar la colección, los documentos se ven así:
{ "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 }
Seleccionar elementos aleatorios de una colección
El operador $rand permite seleccionar documentos aleatorios de una colección. Dada una colección de registros de votantes:
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 } ] )
La siguiente consulta recupera una selección aleatoria de aproximadamente la mitad de los votantes del distrito 3:
db.voters.find( { district: 3, $expr: { $lt: [0.5, {$rand: {} } ] } }, { _id: 0, name: 1, registered: 1 } )
La coincidencia inicial en el campo district selecciona documentos donde el votante es del distrito 3.
El operador $expr utiliza $rand para refinar la operación. Para cada find documento, $rand genera un valor entre 0 1y. El umbral de 0.5 significa que ($lt) la comparación menor que será válida para aproximadamente la mitad de los documentos del conjunto.
Hay 7 votantes en el Distrito 3, al ejecutar el código se selecciona aproximadamente la mitad de ellos.
{ "name" : "Beckham", "registered" : true } { "name" : "Eckhard", "registered" : false } { "name" : "Grimwald", "registered" : true } { "name" : "Humphrey", "registered" : true }