2016-12-24 45 views
0

如何從MongoDb中的集合中獲取5個項目。 這裏到目前爲止,我已經做的:在Mongodb Javascript中,如何從集合中獲取5個項目?最小5和最大5

var playerData = Spark.runtimeCollection("playerNewspaper"); // get the collection data 
var currentPlayer = playerData.find().limit(5).skip(Math.random() * playerData.count()); 

Spark.setScriptData("player_Newspaper", currentPlayer); // return the player via script-data 

但在它上面的代碼是不完美的產生5個隨機項目。

例子:

我們有10個記錄,並希望得到5條隨機:

當隨機開始記錄從7那麼我們可以得到的只有4個記錄,因爲它從7(10條記錄開始 - 6 = 4條記錄)。但是如果我們想要得到的記錄(5條記錄)少於它,那麼我需要再次進行隨機抽取。所以最後我們總是得到最少5條記錄和最多5條記錄。

怎麼辦?

由於

丹尼斯

回答

0

嘗試

變種currentPlayer = [];
do {
currentPlayer = playerData.find()。limit(5).skip(Math.random()* playerData.count());
}
while(currentPlayer.length < 5);

「do」內容將首次運行並檢查'while'條件。如果數組的長度小於5,它將重新運行'do'內容。它會去currentPlayer長度等於5.
我假設其他內容是正確的和工作

0

我也有我自己的解決方案。 下面:

var playerData = Spark.runtimeCollection("playerNewspaper"); // get the collection data 
var totaldata = playerData.count(); 
var lim; 
if(totaldata <= 50) { 
    lim = totaldata; 
    var currentPlayer = playerData.find().limit(lim); 
} else { 
    lim = 50; 
    var rnd = Math.floor(Math.random() * playerData.count()); 

    while((playerData.count() - rnd) < lim) { 
     rnd = Math.floor(Math.random() * playerData.count()); 

    } 
    var currentPlayer = playerData.find().limit(lim).skip(rnd); 
} 

但是,這對於限制50