Couchbase View пуст

Если я попытаюсь получить список документов с сервера Couchbase через представление с Java SDK, я получу пустой список результатов:

ViewResult result = dataManager.getBucket().query(ViewQuery.from("_design/dev_task", "byID"));
List<ViewRow> rows = result.allRows(); // rows is empty

Однако в веб-консоли то же представление имеет непустой отфильтрованный список результатов. С другой стороны, поиск по идентификатору документа работает безупречно:

JsonDocument taskDocument = dataManager.getBucket().get("task1", JsonDocument.class);
// taskDocument contains the document for task1

Запрос был определен как:

function (doc, meta) {
  if (typeof(doc.taskID) == "number") {
    emit(doc.taskID, doc);
  }
}

и имеет следующее название:

введите здесь описание изображения

Что я могу делать неправильно?


person Bastian    schedule 08.04.2015    source источник


Ответы (2)


Вы опубликовали представление? Я предполагаю, что SDK работает в производственном режиме, поэтому поиск документа будет работать, поскольку документ существует, но для представлений он не будет искать в представлениях разработки, как показано на скриншоте выше.

person scalabilitysolved    schedule 08.04.2015
comment
Мнение еще не опубликовано. Как узнать, в каком режиме работает SDK? Я попытался установить переменную среды с помощью System.setProperty("viewmode", "development");. Это, впрочем, ничего не изменило. - person Bastian; 08.04.2015
comment
Обычно по умолчанию используется производственный режим, если я правильно помню, вы можете видеть в журналах запуска, что SDK выйдет из системы, в каком режиме он находится. если нет, по крайней мере, мы можем рассматривать что-то другое как проблему. - person scalabilitysolved; 08.04.2015
comment
Консоль не упоминает ни о каком режиме. Поэтому я просто опубликовал представление и не заметил никаких изменений в поведении; rows остается пустым. У тебя есть другие идеи? - person Bastian; 10.04.2015

Хорошо, я наконец нашел решение, прочитав эту запись в блоге< /а>. Проблема заключается в первом параметре метода .from: следует избегать префикса _design/dev_. Поэтому вместо вызова

ViewQuery.from("_design/dev_task", "byID")

я должен использовать

ViewQuery.from("task", "byID")

Это оставляет меня с непустым массивом строк!

person Bastian    schedule 10.04.2015
comment
эти две строки абсолютно одинаковы - person Dan Levin; 03.11.2015
comment
@DanLevin Спасибо за этот комментарий. Я исправил вторую строку. - person Bastian; 03.11.2015
comment
np, к сожалению, я все еще получаю сообщение об ошибке «не найдено» :( есть идеи? - person Dan Levin; 03.11.2015
comment
Хммм... в настоящее время я больше не участвую в Couchbase. Так что мои знания уже ржавеют. Вы пробовали ответ масштабируемости? Вы также можете просто опубликовать свои проблемы в новом сообщении, чтобы получить информацию от более опытных пользователей. - person Bastian; 04.11.2015
comment
Убедитесь, что вы запрашиваете производственное представление (которое является опубликованным представлением разработки). Кроме того, убедитесь, что вы используете хорошие имена: представление dev обычно имеет префикс dev_, а рабочее представление — префикс design_. Вы можете запросить производственное представление без использования префикса. - person Ana; 30.01.2017