Ошибка нескольких запросов при создании представлений Couchbase

Я пытаюсь создать представление в Couchbase. Ниже мой запрос,

function (doc, meta) {
  if (doc._class == "com.abc.xyz.Account" && doc.accountId) {
    emit(doc.accountId, null);
  }
}

Однако я получаю исключение ниже:

{"error":"Error, you cannot issue more than one query at once. Please remove all text after the semicolon closing the first query."}

Не знаю, в чем проблема с запросом. Пытался найти решение, но не нашел.


person sandeep    schedule 10.12.2018    source источник
comment
Пожалуйста, предоставьте более подробную информацию об используемых версиях библиотек, таких как Couchbase и Spring-Data-Couchbase.   -  person Rizwan    schedule 11.12.2018
comment
Я запускаю этот запрос в редакторе запросов Couchbase, версия Couchbase 5.5.1. Кроме того, версия клиентской библиотеки cb java — 2.5.9, а spring-data-couchbase:3.0.9.   -  person sandeep    schedule 11.12.2018


Ответы (1)


Функция javascript, упомянутая в вопросе, выглядит как определение Couchbase Map/Reduce View Engine. Их можно запрашивать с помощью SDK или REST API, а подробности приведены в Просмотреть раздел запросов. Кроме того, пользовательский интерфейс Map/Reduce View (там же, где определены функции map/reduce) имеет некоторые ограниченные возможности для запроса определяемого представления.

Пользовательский интерфейс Couchbase Query предназначен исключительно для запросов N1QL/SQL++. Упомянутая функция может быть очень легко выражена в N1QL:

CREATE INDEX ON mybucket(accountId) WHERE _class == "com.abc.xyz.Account";

Таким образом, нет необходимости создавать представления Couchbase Map/Reduce. И указанный выше индекс можно запросить, например, как:

SELECT count(*) FROM mybucket WHERE _class == "com.abc.xyz.Account";

Я уверен, что вышеупомянутая функция, которую вы упомянули, является просто примером, а фактический вариант использования более сложен, но общий подход остается верным. Рекомендуется начать с использования декларативного инструмента (N1QL), так как он намного проще в использовании.

Для этого существует множество полезных ресурсов, таких как Учебное пособие по N1QL, которое поможет начать использовать N1QL. Это было бы лучшей отправной точкой для большинства случаев использования.

person SM3    schedule 11.12.2018
comment
спасибо СМ3. Я пытаюсь использовать в своем проекте функцию использования пружинных данных из коробки. Например, у меня есть интерфейс AccountRepository, расширяющий CouchbaseRepository. У меня есть определение метода findByAccountId. Однако в одном из потоков ссылка, упоминается, что мне понадобится резервное представление, чтобы заставить его работать. Кроме того, следующие два других способа работают для меня. - person sandeep; 12.12.2018
comment
Необязательно‹Учетная запись› accountList = accountRepository.findById(accountId); Тест JsonDocument = Bucket.get(accountId.toString()); Я не уверен, что не так с вышеуказанным запросом для создания представлений. - person sandeep; 12.12.2018