MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come trovare record casuali in Mongoose

L'idea alla base di ottenere un record casuale è interrogare tutti i record corrispondenti ma ottenerne uno. Questo è ciò che findOne() fa senza alcun criterio indicato.

Quindi vorrai scegliere una voce casuale in tutte le possibili corrispondenze. Questo viene fatto da:

  1. Scopri quante voci possibili ci possono essere:usiamo count() sulla raccolta per questo. Nota che, come menzionato nei commenti, count è deprecato nella versione 4 e si dovrebbe invece usare stimatoDocumentCount o countDocuments. La differenza sta nella precisione/utilizzo della memoria, tra le altre cose. Ecco un post SO che ne discute un po'.

  2. Trova un numero casuale nel nostro conteggio.

  3. Usa skip() per "saltare" alla corrispondenza desiderata e restituirla.

Ecco uno snippet modificato da questa risposta 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) 
    })
})