N1ql查询以按Couchbase数据库中的两个字段进行过滤

时间:2019-06-14 04:02:49

标签: spring-boot reactive-programming spring-webflux n1ql

我使用springboot和反应式沙发床创建了一个Web服务,在存储库接口中,我想向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 :(得分:0)

按如下所示进行操作后,效果很好。

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

似乎错误出在变量名“ role”上;到处都更改为“ enrolledRole”。它工作正常。

答案 1 :(得分:0)

角色是保留关键字,如此处https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/reservedwords.html

所述

您可以使用反引号转义符

示例:

 SELECT *
 FROM default
 WHERE `role` = "xyz";