Return 来自钥匙的 couchbase 文档

Return couchbase documents from keys

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

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