我正在尝试在Spring Data Couchbase上进行基于N1QL的查询 . 文件说
#n1ql.fields将被重建实体所需的字段列表(例如,用于SELECT子句)替换 .
我的存储库实现是这样的:
@Query("#{#n1ql.fields} WHERE #{#n1ql.filter}")
List<User> findAllByFields(String fields);
我正在调用此查询,如下所示:
this.userRepository.findAllByFields("SELECT firstName FROM default");
我收到这个错误:
由以下原因引起:org.springframework.data.couchbase.core.CouchbaseQueryExecutionException:由于以下n1ql错误,无法执行查询:{“msg”:“语法错误 - 在AS”,“code”:3000}
经过一番研究,我也尝试过:
@Query("SELECT #{#n1ql.fields} FROM #{#n1ql.bucket} WHERE #{#n1ql.filter}")
使用此查询,我没有收到错误,当我的查询尝试获取firstName字段时,我得到了所有文档,但只有其他字段设置为null的ID .
this.userRepository.findAllByFields("firstName");
谁知道怎么做这样的查询?
先感谢您 .
1 回答
你误解了这个概念,我鼓励你给文档更多时间,看看更多的例子 . 我不确定你到底想要实现什么,但我会举一些例子 .
Find all users (with all of their stored data)
这基本上会产生
SELECT meta().id,_cas,* FROM bucket WHERE type='com.example.User'
注意
findAllUsers()
不接受任何参数,因为上面的@Query
中没有定义param占位符 .Find all users where firstName like
这将产生类似上面的查询,但有一个额外的条件
firstName like
请注意,此方法采用关键字,因为有一个param占位符定义
$1
.请注意文档中的说明
现在,如果您不想获取用户的所有数据,则需要指定所选字段,阅读以下链接以获取更多信息
How to fetch a field from document using n1ql with spring-data-couchbase
https://docs.spring.io/spring-data/couchbase/docs/2.2.4.RELEASE/reference/html/#_dto_projections