Операция с объемным вложенным документом Couchbase - PullRequest
0 голосов
/ 23 февраля 2019

Я использую Couchbase-Java SDK 2.7.1 и пытаюсь выполнить массовую операцию subdoc над набором ключей документа.Приведенный ниже код не выдает никаких ошибок, но документы не обновляются после выполнения данного кода.

/*
   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 голосов
/ 06 марта 2019

Как предположил dnault в комментарии, вы никогда не запускаете Observable для фактического запуска операций.Поток выполнения настроит Observable и продолжит работу, поэтому ваше приложение просто закроется, если это все, что нужно.

Если ваше приложение предназначено для асинхронного потребления вывода, вы можете просто добавить его.вариантов subscribe.

Если вы хотите заблокировать до завершения операций, вы хотите использовать защелку обратного отсчета, или вы можете сделать что-то вроде

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

Это заблокирует и выдаст все результаты в одном списке.

...