Tanken bakom att få en slumpmässig post är att fråga alla matchande poster men bara skaffa en. Det här är vad findOne()
gör utan några angivna kriterier.
Då vill du välja en slumpmässig post i alla möjliga matchningar. Detta görs av:
-
Ta reda på hur många möjliga poster det kan finnas - vi använder
count()
på samlingen för detta. Observera att, som nämnts i kommentarerna,count
är utfasad i version 4 och man bör använda estimatedDocumentCount eller countDocuments istället. De olika ligger bland annat i precision/minnesanvändning. Här är ett SO-inlägg som diskuterar det lite. -
Kom på ett slumpmässigt tal inom vårt antal.
-
Använd
skip()
för att "hoppa" till önskad matchning och returnera den.
Här är ett utdrag som modifierats från detta 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)
})
})