使用RegExp和.skip()查找随机记录不起作用

时间:2018-08-08 18:08:55

标签: javascript mongoose find

我有此代码:

router.get("/index/fill", function(req, res){
  var topicId = req.query.topicId;

  Topics.findById(topicId, function(err, topic){
    if(err){
      console.log(err);
    } else {
      var random = Math.floor(Math.random() * 115)
      Playlist.find({$or: [{title: new RegExp(topic.title, 'i')}]}).sort({date: -1}).limit(1).skip(random).exec(function(err, recentPlaylists){
        if(err){
          console.log(err);
        } else {

        }
      }); 
    }
  });
});

我发现.skip()不起作用,当我使用不带.skip()部分的代码时,它起作用了。
我遵循此post编写代码。

当我使用.skip()时,它将返回一个空数组。

.skip()在做什么,我该如何解决?

1 个答案:

答案 0 :(得分:2)

您的.limit().skip之前。因此您总是返回1条记录,然后跳过whatever Math.Random返回...因此没有结果。

切换它们,以便您先skip,然后再limit

mongoDB也有其own regex operator $regex

{ title: { $regex: /pattern/, $options: 'i' }}

对于“随机”记录,请使用$sample

db.getCollection('<YouColName>').aggregate([
{ $sample: { size: 3 } }
])