来自MongoDB的随机记录

时间:2015-11-02 04:43:14

标签: node.js mongodb

这是我第一次在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以及下面的评论应该会有所帮助!

1 个答案:

答案 0 :(得分:1)

Math.random()*某个数字不会给你整数...

console.log(Math.random() * 22)
// 12.282829137984663

因此你的跳过(可能)永远不会执行。试试

var numRecordsToSkip = Math.round(Math.random() * numRecords, 0)
.limit(4).skip(numRecordsToSkip) ...
相关问题