Идеята зад получаването на произволен запис е да се запитат всички съвпадащи записи, но просто да се получи един. Това е, което findOne()
прави без дадени критерии.
След това ще искате да изберете произволен запис във всички възможни съвпадения. Това се прави от:
-
Разберете колко възможни записи може да има - използваме
count()
в колекцията за това. Имайте предвид, че, както е споменато в коментарите,count
е остарял във версия 4 и вместо това трябва да се използва evaludDocumentCount или countDocuments. Различното се крие в прецизността/използването на паметта, наред с други неща. Ето SO публикация, която го обсъжда малко. -
Измислете произволно число в рамките на нашия брой.
-
Използвайте
skip()
за да „прескочите“ до желаното съвпадение и да го върнете.
Ето фрагмент, модифициран от този 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)
})
})