0

我正在使用 mongo DB 开始新的 Java Play 项目。我浏览了 Play!文档,但没有 mongo Java 异步驱动程序。仅提及 Scala 反应式驱动程序。SO有许多类似的问题,但它们都已经过时了。

现在以异步方式处理 mongo DB 的最佳方法是什么?

假设我只有一个带有订单的文档集合,我需要添加一个 OrderController 来返回来自 mongo 的所有订单。

4

1 回答 1

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;
    }
}
于 2017-09-05T08:01:15.427 回答