1

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"];
4

1 に答える 1

1

findAll(Iterable)基礎となるビュー (エンティティに対応するドキュメントのみをインデックス化することにPushなっています) を使用しますが、制限するビュー キーを提供するため、すでにかなり効率的であるはずです。

とはいえ、ドキュメント キーを直接使用する N1QL クエリを実行したい場合は、@Query. キーを直接使用するため、WHERE 句は特に必要ありません (キーがPushドキュメントに対応していることはわかっています)。したがって、次のようなインラインクエリを簡単に実行できます。

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

キーのリストを動的に構築したい場合は、正しい構文を調べる必要がありますが、これは SpEL を使用して実行できるに違いありません。たとえば、クエリ シグネチャのメソッド パラメータから 2 つのキーを取得するには、次のようにします。

@Query("#{#n1ql.selectEntity} USE KEYS [\"#{[0]}\", \"#{[1]}\"]")
Collections<Push> findTwoByN1qlKey(String key1, String key2);
于 2016-05-26T17:14:57.537 に答える