从密钥

时间:2016-05-26 14:34:28

标签: couchbase spring-data-couchbase

我想根据使用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"];

1 个答案:

答案 0 :(得分:0)

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);