Ideen bag at få en tilfældig post er at forespørge på alle de matchende poster, men bare få en. Dette er hvad findOne()
gør uden nogen opgivne kriterier.
Så vil du vælge en tilfældig post i alle de mulige kampe. Dette gøres af:
-
Find ud af, hvor mange mulige poster der kan være - vi bruger
count()
på indsamlingen hertil. Bemærk, at som nævnt i kommentarer,count
er forældet i version 4, og man bør bruge estimatedDocumentCount eller countDocuments i stedet for. Det forskellige ligger blandt andet i præcision/hukommelsesbrug. Her er et SO-indlæg, der diskuterer det lidt. -
Kom med et tilfældigt tal inden for vores optælling.
-
Brug
skip()
at "springe over" til det ønskede match og returnere det.
Her er et uddrag som ændret fra dette SO-svar:
// 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)
})
})