我有此代码:
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()
在做什么,我该如何解决?
答案 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 } }
])