0

1. Map を持つクラスがあるとします。

public class MobileToken
{

    @Id
    private String                    _id;

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

キーを使用してトークンのマップから単一のトークンを取得/削除するにはどうすればよいですか? この操作により、ドキュメントが部分的に更新されます。

2. クラスで $set 操作または Query のような findAndModify を使用したい。上記のクラスを考慮して、指定された一連のユーザー名を持つすべてのレコードを検索し、すべてのレコードの applicationId を何らかの値「abc」で更新したいと考えています。

これらの両方のシナリオを達成するための規則はありますか?

4

1 に答える 1

0

簡単な答えは、Spring Data と QueryDSL の統合を使用することです。QueryDSL はQModels、注釈が付けられたドキュメントごとにメタ モデル ( ) を@Document作成し、それらを使用して柔軟なクエリを作成できます。あなたの場合、たとえば、メタモデルがありますQMobileToken

  1. クラスで $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(新しいドキュメントを追加するか、既存のドキュメントを変更するたびにこれを行います)。

于 2015-12-19T17:30:27.697 に答える