简短的回答,我会使用 spring 数据和 QueryDSL 集成。QueryDSL 会QModels
为每个带有注释的文档创建它的元模型 ( ),@Document
您可以使用它们来创建灵活的查询。在您的情况下,您将拥有一个元模型,例如QMobileToken
.
- 在一个类中,我想使用 $set 操作或 findAndModify 之类的 Query。考虑到上面的类,我想找到具有给定用户名集的所有记录,并想通过某个值“abc”更新所有记录的 applicationId。
如果您使用的是 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
方法并迭代 each 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
(每次添加新文档或更改现有文档时都执行此操作)