使用mongodb异步驱动程序将文档列表转换为java列表

6fe3ivhb  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(283)

我是mongodb的新手。有人建议使用mongodb异步java驱动程序api而不是spring data/mongo db驱动程序api,因为异步api支持对db的回调和非阻塞调用。当我浏览下面的链接时,我注意到了一些不同之处。
异步驱动程序api:http://mongodb.github.io/mongo-java-driver/3.0/driver-async/reference/crud/ 同步驱动程序api:http://mongodb.github.io/mongo-java-driver/3.0/driver/reference/crud/
我关心的主要区别是,如何使用异步驱动程序api将resultset文档获取到arraylist/linkedlist中。async api页提供了下面的代码块来遍历结果,但没有将它们分配到我们选择的列表中:

// find documents
collection.find().into(new ArrayList<Document>(), 
    new SingleResultCallback<List<Document>>() {
        @Override
        public void onResult(final List<Document> result, final Throwable t) {
            System.out.println("Found Documents: #" + result.size());
        }
    });

这会将文档复制到新的arraylist(into方法的第一个参数)中,但无法将其取回。
而syncapi支持如下操作,即将所有结果文档复制到arraylist中。

// find documents
List<BasicDBObject> foundDocument = collection.find().into(new ArrayList<BasicDBObject>());

异步api还在发展中还是我遗漏了什么?有没有任何实用工具,特别是异步驱动程序的api输入是非常感谢。
祝你好运,钱德拉。

9q78igpj

9q78igpj1#

我最终使用java 8的完整未来实现了它,如下所示:

public CompletableFuture<List<Document>> getMongoDocuments() throws InterruptedException, ExecutionException {
    CompletableFuture<List<Document>> future = new CompletableFuture<>();
    List<Document> list = new ArrayList<>();

    collection.find().forEach((document) -> {
      try {
        list.add(document);
      } catch (Exception e) {
        LOGGER.error("Error while parsing document::" + document.toString(), e);
      }

    }, (final Void result, final Throwable t) -> {
      future.complete(list);
    });

    List<Document> resultList = future.get(); //Just for testing if everything is as planned
    LOGGER.info("getHighResDocumentsByDriveSessionVinAndLogDate:: Count::" + resultList.size());
    return future;
  }

祝你好运,钱德拉。

wnavrhmk

wnavrhmk2#

您可以通过在调用外部声明列表来返回结果。
例如:

List<Document> docs = new ArrayList<>();
    collection.find().into(docs,
    new SingleResultCallback<List<Document>>() {
        @Override
        public void onResult(final List<Document> result, final Throwable t) {
            System.out.println("Found Documents: #" + result.size());
        }
    });

因为这些操作是异步的,所以您需要让方法等待它完成。
我希望你通过这个链接
使用mongodb异步驱动程序将文档列表转换为java列表

相关问题