我正在使用 mongo DB 开始新的 Java Play 项目。我浏览了 Play!文档,但没有 mongo Java 异步驱动程序。仅提及 Scala 反应式驱动程序。SO有许多类似的问题,但它们都已经过时了。
现在以异步方式处理 mongo DB 的最佳方法是什么?
假设我只有一个带有订单的文档集合,我需要添加一个 OrderController 来返回来自 mongo 的所有订单。
我正在使用 mongo DB 开始新的 Java Play 项目。我浏览了 Play!文档,但没有 mongo Java 异步驱动程序。仅提及 Scala 反应式驱动程序。SO有许多类似的问题,但它们都已经过时了。
现在以异步方式处理 mongo DB 的最佳方法是什么?
假设我只有一个带有订单的文档集合,我需要添加一个 OrderController 来返回来自 mongo 的所有订单。
最后我设法做到了。为其他程序员发布代码。代码使用异步驱动程序转到 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;
}
}