如何在Mongoose中找到随机记录

时间:2016-09-01 17:33:04

标签: javascript mongodb 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 个答案:

答案 0 :(得分:28)

获取随机记录背后的想法是查询所有匹配的记录,但只获得一个。这是findOne()没有给出任何标准的情况。

然后你会想要在所有可能的匹配中选择一个随机条目。这可以通过以下方式完成:

  1. 找出可能有多少条目 - 我们在集合上使用count()

  2. 在我们的计数中记下一个随机数。

  3. 使用skip()“跳过”到所需的匹配并返回。

  4. 以下是根据此SO answer修改的代码段:

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

答案 1 :(得分:0)

使用mongoose从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”。

谢谢!