Gagasan di balik mendapatkan catatan acak adalah untuk menanyakan semua catatan yang cocok tetapi hanya mendapatkan satu. Inilah yang findOne()
melakukannya tanpa kriteria yang diberikan.
Kemudian Anda akan ingin memilih entri acak di semua kemungkinan kecocokan. Ini dilakukan oleh:
-
Cari tahu berapa banyak kemungkinan entri yang ada - kami menggunakan
count()
pada koleksi untuk ini. Perhatikan bahwa, seperti yang disebutkan dalam komentar,count
sudah usang dalam versi 4 dan seseorang harus menggunakan estimasiDocumentCount atau countDocuments sebagai gantinya. Perbedaannya terletak pada presisi/penggunaan memori antara lain. Berikut postingan SO yang membahasnya sedikit. -
Temukan nomor acak dalam hitungan kami.
-
Gunakan
skip()
untuk "melompat" ke kecocokan yang diinginkan dan mengembalikannya.
Berikut cuplikan yang dimodifikasi dari jawaban SO ini:
// 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)
})
})