sql >> Base de Datos >  >> NoSQL >> MongoDB

Cómo encontrar un registro aleatorio en Mongoose

La idea detrás de obtener un registro aleatorio es consultar todos los registros coincidentes pero solo obtener uno. Esto es lo que findOne() hace sin ningún criterio dado.

Luego, querrá elegir una entrada aleatoria en todas las coincidencias posibles. Esto lo hace:

  1. Averigüe cuántas entradas posibles podría haber - usamos count() en la colección para esto. Tenga en cuenta que, como se menciona en los comentarios, count está en desuso en la versión 4 y en su lugar se debe usar estimadoDocumentCount o countDocuments. La diferencia radica en el uso de precisión/memoria, entre otras cosas. Aquí hay una publicación SO discutiéndolo un poco.

  2. Piensa en un número aleatorio dentro de nuestro conteo.

  3. Usa skip() para "saltar" a la coincidencia deseada y devolverla.

Aquí hay un fragmento modificado de esta respuesta 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) 
    })
})