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