2016-12-24 3 views
0

So erhalten Sie 5 Artikel zufällig aus Sammlung in MongoDb. Hier bisher ich zu tun haben:In Mongodb Javascript, wie 5 Artikel zufällig aus Sammlung? Minimal 5 und maximal 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 

Aber im Code oben ist es nicht perfekt 5 Zufallsgenerator zu erzeugen.

Beispiel:

Wir haben 10 Nehmen und wollen 5 Nehmen Sie Randomly erhalten:

Wenn Zufalls Start Record Ab 7 Dann alles, was wir nur 4 Nehmen Weil es von 7 (10 Datensätze beginnen bekommen - 6 = 4 Datensätze). Aber ich brauche wenn der Datensatz, den wir bekommen wollen (5 Datensätze) kleiner ist als es dann wieder zufallsbedingt ist. Letztendlich haben wir immer minimal 5 Einträge und maximal 5 Einträge bekommen.

Wie geht das?

Dank

Dennis

Antwort

0

Versuchen

var currentPlayer = [];
do {
currentPlayer = playerData.find(). Limit (5) .skip (Math.random() * playerData.count());
}
while (currentPlayer.length < 5);

'Do' Inhalt wird das erste Mal ausgeführt und prüft auf 'While' Bedingung. Wenn die Länge des Arrays weniger als 5 beträgt, wird der Do-Inhalt erneut ausgeführt. Es wird gehen, bis currentPlayer Länge bis 5.
gleich Ich gehe davon aus, dass andere Inhalte korrekt und Arbeits

0

ich auch meine eigene Lösung. Unten:

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); 
} 

Aber das ist für Limit 50.