首页 > 解决方案 > 如何在 Spring Boot 中将 mongo db update 运算符应用为 $inc

问题描述

我想做的只是使用 spring boot 和 mongodb 进行一个简单的查询,但我无法在线找到资源,更新查询以通过一个给定的 searchString 增加频率字段,或者如果找不到 searchString 则创建一个新文档。

@Query("{'searchString': ?0 } , {'$inc' : {'frequency':1}} ")
public void incFreq(String query);

标签: javamongodbspring-bootspring-data-jpa

解决方案


希望你使用spring-data-mongodb。由于您没有提到 Document 类,我假设它为Person.class

首先是服务实现中@AutowireMongoTemplate

@Autowire
MongoTemplate mongoTemplate;

然后你可以做的是,你可以调用如下查询,

public void incFreq(String given_str){
    Query query=new Query(Criteria.where("searchString ").is("given_str"));
    Person person=mongoTemplate.find(query,Person.class);

    if(person!=null){
        Update update=new Update().inc("frequency",1)
        UpdateResult result=mongoTemplate.updateOne(query,update,Person.class);
        // bu using the result, you can see modifiedCount(),matchCount()
    }else{
        // insert query
    }
}

如果您要使用 JPA 方法,那么

public void incFreq(String given_str){
    Optional<Person> p=personRepository.findBySearchString(String given_str);
    if(p.isPresent()){
        p.get().setFrequency(p.get().getFrequency()+1);
        personRepository.save(p);
    }else{
        Person p=new Person();
        p.setName("some name");
        p.setFrequency(1);
        personRepository.save(p);
    }
}

参考Spring 数据 mongodb


推荐阅读