这是我第一次在 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/