sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man hittar slumpmässiga poster i Mongoose

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:

  1. 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.

  2. Kom på ett slumpmässigt tal inom vårt antal.

  3. 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) 
    })
})


  1. MongoDB $oid vs ObjectId

  2. Åtgärda sidfel i MongoDB

  3. Introduktion till Redis

  4. redis dump.rdb / sparar små filer