MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment trouver un enregistrement aléatoire dans Mongoose

L'idée derrière l'obtention d'un enregistrement aléatoire est d'interroger tous les enregistrements correspondants mais d'en obtenir un seul. C'est ce que findOne() fait sans aucun critère donné.

Ensuite, vous voudrez choisir une entrée au hasard dans toutes les correspondances possibles. Ceci est fait par :

  1. Découvrez combien d'entrées possibles il pourrait y avoir - nous utilisons count() sur la collecte pour cela. Notez que, comme mentionné dans les commentaires, count est obsolète dans la version 4 et il convient d'utiliser la valeur estimateDocumentCount ou countDocuments à la place. La différence réside, entre autres, dans la précision/l'utilisation de la mémoire. Voici un article SO qui en parle un peu.

  2. Trouvez un nombre aléatoire dans notre décompte.

  3. Utilisez skip() pour "passer" à la correspondance souhaitée et la renvoyer.

Voici un extrait modifié de cette réponse 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) 
    })
})