Spring 数据 Couchbase #n1ql.fields 查询
Spring data Couchbase #n1ql.fields query
我正在尝试在 Spring Data Couchbase 上进行基于 N1QL 的查询。文件说
#n1ql.fields will be replaced by the list of fields (eg. for a SELECT clause) necessary to reconstruct the entity.
我的存储库实现是这个:
@Query("#{#n1ql.fields} WHERE #{#n1ql.filter}")
List<User> findAllByFields(String fields);
我按如下方式调用此查询:
this.userRepository.findAllByFields("SELECT firstName FROM default");
我收到这个错误:
Caused by: org.springframework.data.couchbase.core.CouchbaseQueryExecutionException: Unable to execute query due to the following n1ql errors:
{"msg":"syntax error - at AS","code":3000}
经过一番研究,我也尝试了:
@Query("SELECT #{#n1ql.fields} FROM #{#n1ql.bucket} WHERE #{#n1ql.filter}")
使用此查询,我没有收到错误,当我的查询尝试获取 firstName 字段时,我存储了所有文档,但只有 ID,其他字段设置为空。
this.userRepository.findAllByFields("firstName");
有人知道如何进行这样的查询吗?
提前致谢。
你误解了这个概念,我鼓励你给文档更多时间并查看更多示例。我不确定你到底想达到什么目的,但我会举一些例子。
查找所有用户(及其所有存储的数据)
@Query("#{#n1ql.selectEntity} WHERE #{#n1ql.filter}")
List<User> findAllUsers();
这基本上会生成SELECT meta().id,_cas,* FROM bucket WHERE type='com.example.User'
注意 findAllUsers()
不接受任何参数,因为上面 @Query
中没有定义参数占位符。
查找名字喜欢
的所有用户
@Query("#{#n1ql.selectEntity} WHERE #{#n1ql.filter} AND firstName like ")
List<User> findByFirstNameLike(String keyword);
这将生成类似于上述查询的内容,但带有额外的 where 条件 firstName like
请注意此方法需要一个关键字,因为定义了一个参数占位符
。
文档中的注意事项
#{#n1ql.selectEntity} WHERE #{#n1ql.filter} AND test =
is equivalent to
SELECT #{#n1ql.fields} FROM #{#n1ql.bucket} WHERE
#{#n1ql.filter} AND test =
现在,如果您不想获取用户的所有数据,则需要指定要选择的字段,阅读以下链接了解更多信息
https://docs.spring.io/spring-data/couchbase/docs/2.2.4.RELEASE/reference/html/#_dto_projections
我正在尝试在 Spring Data Couchbase 上进行基于 N1QL 的查询。文件说
#n1ql.fields will be replaced by the list of fields (eg. for a SELECT clause) necessary to reconstruct the entity.
我的存储库实现是这个:
@Query("#{#n1ql.fields} WHERE #{#n1ql.filter}")
List<User> findAllByFields(String fields);
我按如下方式调用此查询:
this.userRepository.findAllByFields("SELECT firstName FROM default");
我收到这个错误:
Caused by: org.springframework.data.couchbase.core.CouchbaseQueryExecutionException: Unable to execute query due to the following n1ql errors: {"msg":"syntax error - at AS","code":3000}
经过一番研究,我也尝试了:
@Query("SELECT #{#n1ql.fields} FROM #{#n1ql.bucket} WHERE #{#n1ql.filter}")
使用此查询,我没有收到错误,当我的查询尝试获取 firstName 字段时,我存储了所有文档,但只有 ID,其他字段设置为空。
this.userRepository.findAllByFields("firstName");
有人知道如何进行这样的查询吗?
提前致谢。
你误解了这个概念,我鼓励你给文档更多时间并查看更多示例。我不确定你到底想达到什么目的,但我会举一些例子。
查找所有用户(及其所有存储的数据)
@Query("#{#n1ql.selectEntity} WHERE #{#n1ql.filter}")
List<User> findAllUsers();
这基本上会生成SELECT meta().id,_cas,* FROM bucket WHERE type='com.example.User'
注意 findAllUsers()
不接受任何参数,因为上面 @Query
中没有定义参数占位符。
查找名字喜欢
的所有用户@Query("#{#n1ql.selectEntity} WHERE #{#n1ql.filter} AND firstName like ")
List<User> findByFirstNameLike(String keyword);
这将生成类似于上述查询的内容,但带有额外的 where 条件 firstName like
请注意此方法需要一个关键字,因为定义了一个参数占位符 。
文档中的注意事项
#{#n1ql.selectEntity} WHERE #{#n1ql.filter} AND test =
is equivalent to
SELECT #{#n1ql.fields} FROM #{#n1ql.bucket} WHERE #{#n1ql.filter} AND test =
现在,如果您不想获取用户的所有数据,则需要指定要选择的字段,阅读以下链接了解更多信息
https://docs.spring.io/spring-data/couchbase/docs/2.2.4.RELEASE/reference/html/#_dto_projections