Couchbase批量子文档操作

时间:2019-02-23 17:11:48

标签: java rx-java couchbase subdocument couchbase-java-api

我正在使用Couchbase-Java SDK 2.7.1,并尝试对文档密钥集执行批量子文档操作。下面的代码不会引发任何错误,但是在执行给定代码后文档不会得到更新。

/*
   Document structure:
   {
       "key1": "",
       "key2:: ""
   }
*/

List<String> docIds = new ArrayList<String>();
docIds.add("mydoc-1");
docIds.add("mydoc-2");
String docPath = "key1";
String value = "myVal";

Observable<String> docIdsObs = Observable.from(docIds);
Observable<DocumentFragment<Mutation>>
    subdocAppendObs = 
      docIdsObs.flatMap(docId -> this.subdocUpsert(bucket, docId, docPath, value,
                                                  persist, replicate, timeout,
                                                  timeunit));

1 个答案:

答案 0 :(得分:1)

正如dnault在评论中建议的那样,您永远不会触发Observable来真正开始操作。执行流程将设置Observable并继续执行,因此,如果仅此而已,则您的应用程序将退出。

如果您的应用旨在异步使用输出,则只需添加subscribe的变体之一。

如果您要在操作完成之前进行阻止,则可以使用倒计时闩锁,也可以执行类似的操作

    List<DocumentFragment<Mutation>> result = docIdsObs.flatMap(docId -> this.subdocUpsert(bucket, docId, docPath, value,
                                                  persist, replicate, timeout,
                                                  timeunit));
        .toList()
        .toBlocking()
        .single();

这将阻止并在单个列表中产生所有结果。