使用Mongo DB异步驱动程序将文档列表导入Java列表

时间:2016-05-10 06:24:43

标签: java mongodb asynchronous

我是MongoDB的新手。由于异步API支持对数据库的回调和非阻塞调用,因此建议使用MongoDB异步Java驱动程序API而不是Spring-Data / Mongo数据库驱动程序API。当我通过以下链接时,我注意到了一些差异。

异步驱动程序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/

我担心的主要区别是,我们如何使用async驱动程序api将结果集文档放入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方法的第一个参数),但是无法将其恢复。

虽然sync api支持如下操作,但会将所有结果文档复制到arraylist中。

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

Async API是否仍在发展或者我遗失了什么?是否有专门为异步驱动程序api提供的实用程序非常感谢输入。

最诚挚的问候, 钱德拉。

2 个答案:

答案 0 :(得分:1)

您可以通过在通话外声明列表来返回结果。

例如:

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());
        }
    });

由于这些操作是异步的,因此您需要让方法等到它完成。

我希望您通过此链接

Getting list of Documents into Java List using Mongo DB Async Driver

答案 1 :(得分:0)

我终于使用Java 8的CompletableFuture实现了它,如下所示:

  var req = {
 method: 'POST',
 url: 'http://localhost:3000/api/v1/dis_generics',
 headers: {
    "Content-Type": "application/json"
 },
 data: {}
}
$http(req).success(function(data, status, header, config) {

最诚挚的问候, 钱德拉。