MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como encontrar um registro aleatório no Mongoose


A ideia por trás de obter um registro aleatório é consultar todos os registros correspondentes, mas apenas obter um. Isto é o que findOne() faz sem nenhum critério dado.

Então você vai querer escolher uma entrada aleatória em todas as partidas possíveis. Isso é feito por:

  1. Descubra quantas entradas possíveis podem existir - usamos count() na coleção para isso. Observe que, conforme mencionado nos comentários, count está obsoleto na versão 4 e deve-se usar estimadoDocumentCount ou countDocuments em vez disso. A diferença está no uso de precisão/memória, entre outras coisas. Aqui está um post SO discutindo um pouco.

  2. Invente um número aleatório dentro de nossa contagem.

  3. Use skip() para "pular" para a correspondência desejada e devolvê-la.

Aqui está um trecho modificado desta resposta 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) 
    })
})