node.js - 来自 MongoDB 的随机记录

标签 node.js mongodb

这是我第一次在 StackOverflow 上提问,对于或多或少的重复或者我发布的任何错误内容,我深表歉意。我正在尝试遵循 Random record from MongoDB 中的代码,但仍然在努力从 Node.js 中的 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加上下面的评论应该会有所帮助!

最佳答案

Math.random() * 有些数字不会给你整数...

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

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

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

关于node.js - 来自 MongoDB 的随机记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33470903/

相关文章:

node.js - `npm publish` 和 `npm install` 失败取决于使用的 `.npmrc` 语法

javascript - NodeJS 何时使用 promise ?

MongoDB list集合过滤器

mongodb - 错误: Network error while attempting to run command 'saslStart' on host 'localhost:27017'

python - DBRefs 可以包含额外的字段吗?

javascript - 无法在 FireFox 中建立与 socket.io 的连接(xhr 轮询错误)

node.js - Jade 的产量相当于多少?

javascript - node-http-proxy proxy.on ('proxyReq' ...) 永远不会触发

javascript - Mongoose 架构 : Forcing an array of objects to be created

PHP 复制 MongoDB 中的文档,替换其 MongoID