0

1.考虑我有一个类有一个地图

public class MobileToken
{

    @Id
    private String                    _id;

    @Indexed
    private String                    username;
    private String                    applicationId;
    private Map<String, String> tokens;
}

如何使用其密钥从令牌映射中获取/删除单个令牌?该操作将导致文档的部分更新。

2. 在一个类中我想使用 $set 操作或 findAndModify 之类的 Query。考虑到上面的课程,我想找到具有给定用户名集的所有记录,并想通过某个值“abc”更新所有记录的 applicationId。

是否有任何约定可以实现这两种情况?

4

1 回答 1

0

简短的回答,我会使用 spring 数据和 QueryDSL 集成。QueryDSL 会QModels为每个带有注释的文档创建它的元模型 ( ),@Document您可以使用它们来创建灵活的查询。在您的情况下,您将拥有一个元模型,例如QMobileToken.

  1. 在一个类中,我想使用 $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(每次添加新文档或更改现有文档时都执行此操作)

于 2015-12-19T17:30:27.697 回答