我正在使用mongo DB启动新的Java Play项目。我看了一下Play!文档,但没有mongo Java异步驱动程序。仅提到Scala反应驱动程序。 SO有许多类似的问题,但它们都已经过时了。
现在以异步方式处理mongo数据库的最佳方法是什么?
假设我只有一个包含订单的文档集合,我需要添加一个OrderController,它将从mongo返回所有订单。
答案 0 :(得分:0)
最后我设法做到了。为其他程序员发布代码。代码使用异步驱动程序转到Mongo并返回带有数据库名称的json。
public class MyController extends Controller {
public CompletionStage<Result> getDBNames() throws InterruptedException {
CompletionStage<List<String>> mongoDBNames = new MongoServiceWithPromises().getMongoDBNames();
return mongoDBNames.thenApply(stringListToJson);
}
Function<List<String>, Result> stringListToJson = obj -> {
JsonNode jsonNode = Json.toJson(obj);
return ok(jsonNode);
};
}
public class MongoServiceWithPromises {
// Open the client
private MongoClient mongoClient = MongoClients.create(new ConnectionString("mongodb://localhost:27017"));
public CompletionStage<List<String>> getMongoDBNames() {
final CompletableFuture<List<String>> future = new CompletableFuture<>();
final SingleResultCallback<List<String>> callback = (dbNames, cb) -> {
if (cb == null) {
future.complete(dbNames);
} else {
future.completeExceptionally(cb);
}
};
mongoClient.listDatabaseNames().into(new ArrayList<>(), callback);
return future;
}
}