簡単な答えは、Spring Data と QueryDSL の統合を使用することです。QueryDSL はQModels
、注釈が付けられたドキュメントごとにメタ モデル ( ) を@Document
作成し、それらを使用して柔軟なクエリを作成できます。あなたの場合、たとえば、メタモデルがありますQMobileToken
。
- クラスで $set 操作や Query のような findAndModify を使いたい。上記のクラスを考慮して、指定された一連のユーザー名を持つすべてのレコードを検索し、すべてのレコードの applicationId を何らかの値「abc」で更新したいと考えています。
Java 8 を使用している場合は、次のようにdefault
メソッドを に追加できますMobileTokenRepository
。
public interface MobileTokenRepository extends MongoRepository<MobileToken, String>, QueryDslPredicateExecutor<MobileToken> {
QMobileToken token = MobileToken.mobileToken;
...
default Iterable<MobileToken> findByUsernames(Collection<String> usernames) {
return findAll(token.username.in(usernmaes));
}
}
このfindByUsernames
メソッドを使用して各を繰り返しMobileToken
、それに応じてそれぞれを変更し、save
メソッドを使用して変更をmongoに保存します。
この統合を有効にするには、次の依存関係を に追加しますpom.xml
。
<dependency>
<groupId>com.mysema.querydsl</groupId>
<artifactId>querydsl-mongodb</artifactId>
<version>3.7.0</version>
</dependency>
<dependency>
<groupId>com.mysema.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>3.7.0</version>
</dependency>
そして追加apt-maven-plugin
:
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>1.1.3</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>src/main/generated</outputDirectory>
<processor>org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
</plugin>
必要なメタ モデルを作成するように QueryDSL に指示するには、次のようにコンパイルしますmvn clean compile
(新しいドキュメントを追加するか、既存のドキュメントを変更するたびにこれを行います)。