Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Misceláneo

$rand

$rand

Devuelve un número de punto flotante pseudoaleatorio en el intervalo [0, 1). 0 incluido, 1 se excluye.

$rand tiene la siguiente sintaxis:

{ $rand: {} }

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 en la colección donors con una cantidad aleatoria de donación:

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 $floor remueve la porción decimal, por lo que el amount actualizado 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 }

El operador $rand se puede utilizar para 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 query recupera una selección aleatoria de aproximadamente la mitad de los votantes en el 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 en los que el votante es del distrito 3.

El operador $expr usa $rand para refinar aún más la operación de find. Para cada documento, $rand genera un valor entre 0 y 1. El umbral de 0.5 significa que la comparación menor que ($lt) será verdadera para aproximadamente la mitad de los documentos en el conjunto.

Hay 7 votantes en el Distrito 3, ejecutar el código selecciona aproximadamente a la mitad de ellos.

{ "name" : "Beckham", "registered" : true }
{ "name" : "Eckhard", "registered" : false }
{ "name" : "Grimwald", "registered" : true }
{ "name" : "Humphrey", "registered" : true }

$rand (aggregation)

Volver

$natural

En esta página