mardi 4 juillet 2017

MongoDB aggregate to randomly select one document within some parameters

The code below will basically find a random player without returning the own player that makes this request, with a certain type, and within a certain level (playerLevelMin, playerLevel and playerLevelMax).

var playersCount = db.collection("playerList").find({"player_id" : { "$ne" : playerID} }).count();

var randomNumber = Math.floor((Math.random() * playersCount-1));

var enemyPlayer = db.collection("playerList").find({$or:[{"level": playerLevelMin}, {"level": playerLevel}, {"level": playerLevelMax}], "type" : type, "player_id" : { "$ne" : playerID} }).limit(1).skip(randomNumber).next();

But if I understand right, it's easier and I could increase performance by using .aggregate?




Aucun commentaire:

Enregistrer un commentaire