Как найти случайная запись в Mongoose [дубликат]

этот вопрос уже есть ответ здесь:

How can i find random records in mongodb?

Я нашел несколько статей здесь, в stackoverflow, но я не мог их понять. например:

db.yourCollection.find().limit(-1).skip(yourRandomNumber).next()

как бы я выполнил его в своем коде? (коллекция является пользователем)

User.findOne(RANDOM PLAYER).then(result) {
console.log(result);
}

2 ответов


идея становится случайной записи для запроса всех записей, но только одна. Это findOne() делает без каких-либо критериев.

затем вы захотите выбрать случайную запись во всех возможных матчах. Это делается с помощью:

  1. узнайте, сколько возможных записей может быть - мы используем count() о коллекции для этого.

  2. придумайте случайное число внутри нашего рассчитывать.

  3. использовать skip() чтобы "пропустить" до нужного матча и вернуть его.

вот фрагмент, измененный из этого так что ответ:

// 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) 
    })
})

чтобы получить случайный документ(ы) из MongoDB с помощью мангуста.

    limitrecords=10;

    function getRandomArbitrary(min, max) {
      return Math.ceil(Math.random() * (max - min) + min);
    }

    var userschema = new Schema({
      name: String
    });

    User = mongoose.model('User', userschema);

    User.count({your_query},function(err,count){

       var skipRecords = getRandomArbitrary(1, count-limitrecords);

       query.skip(skipRecords); // Random Offset

       query.exec(function(err,result){
         console.log(result);  // 10 random users 
       });

    });

Это пример для 10 случайных записей, вы можете установить "limitrecords" в соответствии с вашим требованием.

спасибо!