代码之家  ›  专栏  ›  技术社区  ›  ebdecastro

Spring data Couchbase#n1ql。字段查询

  •  0
  • ebdecastro  · 技术社区  · 9 年前

    #n1ql。字段将替换为重建实体所需的字段列表(例如,对于SELECT子句)。

    我的存储库实现是这样的:

    @Query("#{#n1ql.fields} WHERE #{#n1ql.filter}")
    List<User> findAllByFields(String fields);
    

    this.userRepository.findAllByFields("SELECT firstName FROM default");
    

    我遇到了这个错误:

    {“msg”:“语法错误-at AS”,“代码”:3000}

    经过一点研究,我还尝试:

    @Query("SELECT #{#n1ql.fields} FROM #{#n1ql.bucket} WHERE #{#n1ql.filter}")
    

    在这个查询中,当我的查询试图获取firstName字段时,我没有得到错误,我获取了存储的所有文档,但只有ID其他字段被设置为null。

     this.userRepository.findAllByFields("firstName");
    

    提前谢谢你。

    1 回复  |  直到 9 年前
        1
  •  0
  •   Community Mohan Dere    6 年前

    你误解了这个概念,我鼓励你给文档更多的时间,看更多的例子。我不确定你到底想实现什么,但我会举一些例子。

    @Query("#{#n1ql.selectEntity} WHERE #{#n1ql.filter}")
    List<User> findAllUsers();
    

    SELECT meta().id,_cas,* FROM bucket WHERE type='com.example.User'

    注意 findAllUsers() 不接受任何参数,因为在中没有定义参数占位符 @Query 在上面

    查找firstName喜欢的所有用户

    @Query("#{#n1ql.selectEntity} WHERE #{#n1ql.filter} AND firstName like $1")
    List<User> findByFirstNameLike(String keyword);
    

    firstName like

    $1 .


    #{#n1ql.selectEntity}其中#{#n1ql.filter}和test=$1

    相当于

    从#{n1ql.bucket}中选择#{n1ql.fields},其中


    现在,如果您不想获取用户的所有数据,则需要指定要选择的字段,请阅读以下链接以了解更多信息

    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

    推荐文章