Het idee achter het verkrijgen van een willekeurig record is om alle overeenkomende records op te vragen, maar er slechts één te krijgen. Dit is wat findOne()
doet zonder opgegeven criteria.
Dan wil je een willekeurig item kiezen in alle mogelijke wedstrijden. Dit wordt gedaan door:
-
Ontdek hoeveel mogelijke vermeldingen er kunnen zijn - we gebruiken
count()
hiervoor op de collectie. Merk op dat, zoals vermeld in opmerkingen,count
is verouderd in versie 4 en men zou in plaats daarvan geschatteDocumentCount of countDocuments moeten gebruiken. Het verschil zit hem onder andere in precisie/geheugengebruik. Hier is een SO-bericht waarin het een beetje wordt besproken. -
Verzin een willekeurig getal binnen onze telling.
-
Gebruik
skip()
om naar de gewenste overeenkomst te "overslaan" en deze terug te sturen.
Hier is een fragment zoals gewijzigd van dit SO-antwoord:
// Get the count of all users
User.count().exec(function (err, count) {
// Get a random entry
var random = Math.floor(Math.random() * count)
// Again query all users but only fetch one offset by our random #
User.findOne().skip(random).exec(
function (err, result) {
// Tada! random user
console.log(result)
})
})