java从mongodb获取随机值
我目前有一个MongoDB数据库,其中有一个名为words的集合,其中包含芒果和苹果。我如何在我的程序中随机获得这些数据。这需要在chooseRandomWord()方法中实现。当前运行应用程序时,输出为“所选单词为:com.mongodb.client.internal”。Java8AggregateIterableImpl@2bbf4b8b “。我需要从该集合中随机选择任何项目。我数据库中的apple和mango值称为“name”。所有代码如下:
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Aggregates;
import org.bson.Document;
import java.util.Arrays;
import java.util.Scanner;
public class Game {
MongoClient client = MongoClients.create("mongodb://localhost:27017");
MongoDatabase database = client.getDatabase("chosenWord");
MongoCollection<Document> wordCollection = database.getCollection("words");
//Player empty objects
private final Player playerOne;
private final Player playerTwo;
private static final int maxScore = 5;
private static String chosenWord;
//Default is true but can alter BEFORE initialization of class
public static Boolean canStartGame = true;
//TODO: Try to get these from MongoDB?
String[] words = new String[]
{"banana", "apple", "pineapple",
"mango", "oranges", "watermelon"};
public Game(Player playerOne, Player playerTwo) {
this.playerOne = playerOne;
this.playerTwo = playerTwo;
//Set up chosen word and display
init();
if (canStartGame)
startMakingMoves();
}
private void init(){
//Get chosen word from chooseRandomWord
chosenWord = chooseRandomWord();
display(chosenWord);
}
//Players start making moves
private void startMakingMoves(){
makeMove();
}
//Display given word
private void display(String chosenWord){
System.out.println("The chosen word is: " + chosenWord);
}
//TODO: Write test for getting random word
public String chooseRandomWord() {
wordCollection.aggregate(Arrays.asList(Aggregates.sample(1)));
return wordCollection.toString();
//int randomNumber = new Random().nextInt(words.length);
//return words[randomNumber];
}
private void makeMove() {
int i = 0;
while (i <= maxScore) {
//Player One
System.out.print(playerOne.getName() + "'s move: ");
playerMove(playerOne);
if (playerOne.getScore() == maxScore)
break;
//Player Two
System.out.print(playerTwo.getName() +"'s move: ");
playerMove(playerTwo);
if (playerTwo.getScore() == maxScore)
break;
i++;
}
}
public void playerMove(Player player) {
Scanner scanner = new Scanner(System.in);
String playerGuess = "";
//System.out.println(b);
boolean canRun = true;
while(canRun) {
playerGuess = scanner.nextLine();
//TODO: Change this to check playerGuess is not null or a silly value using regex
if (playerGuess.matches((".*?([a-z_]*\\?+[a-z_]*).*?"))) {
System.out.println("You must enter a valid guess");
} else canRun = false;
}
if (chosenWord.contains(playerGuess)) {
int playerScore = player.getScore();
playerScore++;
player.setScore(playerScore);
player.addMatchedWords(playerGuess);
System.out.println("That's correct, Your score is: " + player.getScore());
determineWinner(player);
} else {
System.out.println("That's incorrect, Your score is: " + player.getScore());
}
}
public String determineWinner(Player player) {
int playerScore = player.getScore();
String winnerText = "";
if (playerScore == maxScore) {
winnerText = player.getName() + " is the winner!";
System.out.println(winnerText);
}
return winnerText;
}
}
# 1 楼答案