这是我第一次在StackOverflow上提问,我为它或多或少重复或者我发布了错误的内容而道歉。我试图按照Random record from MongoDB中的代码进行操作,但仍然在努力从Node中的MongoDB中检索4条随机记录。
在Mongo shell中,我可以成功检索4个随机记录:
db.reccs.find( { genre: { $in: ['fantasy']} } ).limit(4).skip(Math.random() * db.reccs.count( { genre: { $in: req.query.test} } ))
但是,在我的Node.js server.js文件中,此代码不会返回任何错误,也不会返回它找到的前4条记录,而不是随机的4:
app.get('/comics', function(req, res) {
var comics = db.collection('reccs').find( { genre: { $in: req.query.test} } ).limit(4).skip(Math.random() * db.collection('reccs').count( { genre: { $in: req.query.test} } )).toArray(function(error, comics) {
if (error) {console.dir(error+"error!")}
res.send(comics)
}) })
我完全难过了,所以我很感激为什么在Mongo shell中有效,但在server.js中却没有。谢谢!
编辑 - 我相信这个问题是不同的,因为它不是关于Mongo shell,而是Node.js - 链接问题中的解决方案绝对可以在shell中工作,而不是在Node.js中。
编辑2 - 如果有人遇到此问题,此MongoDB count() undefined以及下面的评论应该会有所帮助!
答案 0 :(得分:1)
Math.random()*某个数字不会给你整数...
console.log(Math.random() * 22)
// 12.282829137984663
因此你的跳过(可能)永远不会执行。试试
var numRecordsToSkip = Math.round(Math.random() * numRecords, 0)
.limit(4).skip(numRecordsToSkip) ...