【问题标题】:How to write these queries in spring repository abstraction format如何以 Spring 存储库抽象格式编写这些查询
【发布时间】:2015-12-19 14:23:59
【问题描述】:

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。

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

【问题讨论】:

    标签: mongodb dictionary spring-boot findandmodify


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-22
      • 1970-01-01
      • 1970-01-01
      • 2014-06-02
      • 2021-02-17
      • 1970-01-01
      相关资源
      最近更新 更多