Smyslem získání náhodného záznamu je dotazovat se na všechny odpovídající záznamy, ale získat pouze jeden. To je to, co findOne()
bez daných kritérií.
Pak budete chtít vybrat náhodný záznam ve všech možných shodách. To provede:
-
Zjistěte, kolik možných záznamů může být - používáme
count()
na sbírce za to. Všimněte si, že jak je uvedeno v komentářích,count
je ve verzi 4 zastaralá a místo toho je třeba používat odhadovaný počet dokumentů nebo počet dokumentů. Rozdíl spočívá mimo jiné v přesnosti/použití paměti. Tady je příspěvek SO, který o tom trochu diskutuje. -
Vymyslete náhodné číslo v rámci našeho počtu.
-
Použijte
skip()
"přeskočit" na požadovanou shodu a vrátit ji.
Zde je úryvek upravený z této odpovědi SO:
// 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)
})
})