Массовая операция поддокумента Couchbase

Я использую 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));

person Ashwin    schedule 23.02.2019    source источник
comment
Observable обычно не выполняет никакой работы, пока вы не subscribe к нему.   -  person dnault    schedule 25.02.2019


Ответы (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();

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

person Hod    schedule 06.03.2019