【问题标题】:Return couchbase documents from keys从键中返回 couchbase 文档
【发布时间】:2016-05-26 14:34:28
【问题描述】:

我想使用 spring-data-couchbase 检索基于列表集合存在的所有文档

目前我正在使用

public interface PushRepository extends CrudRepository<Push,String> 

和函数pushRepository.findAll(phoneNumbers) 但我认为它正在检索所有这些然后进行过滤。

如何运行 N1QL 查询,以便只检索键上的文档

 @Query("#{#n1ql.selectEntity} WHERE role = 'admin' AND #{#n1ql.filter}")
 Collection<Push> findByIds(); 

我要运行的查询如下

select * from activation use keys ["xxxxx","yyyyy"];

【问题讨论】:

    标签: couchbase spring-data-couchbase


    【解决方案1】:

    findAll(Iterable) 使用底层视图(它应该只索引与您的 Push 实体相对应的文档),但它确实提供了要限制哪些视图键,所以它应该已经非常高效了。

    也就是说,如果您想执行直接使用文档键的 N1QL 查询,使用@Query 仍然可以实现。由于您直接使用键,因此不需要 WHERE 子句(您知道键对应于Push 文档)。所以你可以像这样简单地做一个内联查询:

    @Query("#{#n1ql.selectEntity} USE KEYS [\"xxxxx\", \"yyyyy\"]")
    Collection<Push> myCustomFind();
    

    如果您想动态构造键列表,则必须查找正确的语法,但我敢打赌,使用 SpEL 可以做到这一点。例如,从查询签名中的方法参数中获取两个键可以这样完成:

    @Query("#{#n1ql.selectEntity} USE KEYS [\"#{[0]}\", \"#{[1]}\"]")
    Collections<Push> findTwoByN1qlKey(String key1, String key2);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-23
      • 1970-01-01
      • 2021-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多