N1ql-запрос для фильтрации по двум полям в базе данных couchbase - PullRequest
0 голосов
/ 14 июня 2019

Я создал веб-сервис, используя springboot и реактивную couchbase, в интерфейсе репозитория я хочу добавить два поля в предложение WHERE.То, что я сделал, ниже

@ViewIndexed(designDoc = "enrolment")
@N1qlPrimaryIndexed
public interface EnrolmentRepository extends ReactiveCouchbaseRepository<Enrolment,String> {
    @Query("#{#n1ql.selectEntity} where #{#n1ql.filter} and course like $1 and role like $2 within #{#n1ql.bucket}")
    Mono<Enrolment> findEnrolmentByCourseRole(String course, String role);
}

Но при использовании приведенного выше кода я получаю ответ как

{
   "timestamp": "2019-06-14T03:57:29.670+0000",
   "path": "/enrolments",
   "status": 500,
   "error": "Internal Server Error",
   "message": "Unable to execute n1ql query due to error:{"msg":"syntax error - at role","code":3000}"
}

Моя конечная точка:

http://localhost:8783/enrolments?course=testcourse&role=testrole

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

роль зарезервированного ключевого слова, как описано здесь https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/reservedwords.html

Вы можете использовать обратные тиковые идентификаторы

Пример:

 SELECT *
 FROM default
 WHERE `role` = "xyz";
0 голосов
/ 14 июня 2019

Это работало нормально после изменения, как показано ниже.

@Query("#{#n1ql.selectEntity} where #{#n1ql.filter} and enrolledCourse = $1 and enrolledRole = $2")
Mono<Enrolment> findEnrolmentByCourseRole(String enrolledCourse, String enrolledRole);

Кажется, ошибка была с именем переменной "роль"; везде поменял на "enrolledRole". Работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...