2015-11-02 143 views
1

這是我第一次問在計算器上的一個問題,我爲它或多或少重複或者如果我發佈任何內容錯誤道歉。我試圖遵循Random record from MongoDB中的代碼,但仍然努力從Node中的MongoDB中檢索4條隨機記錄。隨機記錄從MongoDB的

在蒙戈外殼,我可以成功獲取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) 
}) }) 

我完全難倒,所以我會很感激,爲什麼這部作品在蒙戈外殼,但沒有任何server.js想法。謝謝!

編輯 - 我相信這問題是不同的,因爲它不是關於蒙戈外殼,但Node.js的 - 在鏈接的問題的解決方案並絕對是殼牌在Node.js的工作,只是不

編輯2 - 一旦有人遇到這個,這個MongoDB count() undefined與評論一起下方應該幫助!

+1

node.js中的MongoDB訪問是異步的,所以您需要提供一個回調函數來獲得結果。只有這樣你才能進行後續的查找查詢。 – JohnnyHK

+0

謝謝@JohnnyHK,搞定了! – Victoria

回答

1

的Math.random()*一些數量不會給你整...

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

因此您的跳躍(可能)永遠不會執行。嘗試

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

注意:'VAR numRecordsToSkip = ~~(的Math.random()* numRecords);'轉換爲整數更快 –

+0

@MiKeBu非常有趣的方法 - 從來不知道你能做到這樣。 – jpaljasma