java - 如何在 Spring Boot 中将 mongo db update 运算符应用为 $inc
问题描述
我想做的只是使用 spring boot 和 mongodb 进行一个简单的查询,但我无法在线找到资源,更新查询以通过一个给定的 searchString 增加频率字段,或者如果找不到 searchString 则创建一个新文档。
@Query("{'searchString': ?0 } , {'$inc' : {'frequency':1}} ")
public void incFreq(String query);
解决方案
希望你使用spring-data-mongodb。由于您没有提到 Document 类,我假设它为Person.class
首先是服务实现中@Autowire
的MongoTemplate。
@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);
}
}
推荐阅读
- swift - Swift ENUM 如何将“rawValue”转换回 Enum 大小写?
- kotlin - Corda 节点监控工具或资源管理器,可用于显示除 Corda 资源管理器以外的见解
- asp.net-mvc - 支付处理期间 ProtectPay 托管支付页面超时
- python - Python3 TypeError:只能将列表(不是“str”)连接到列表
- android - 对大量 caffe2 库的未定义引用
- java - 每次按取消选项时,我都想返回第一个对话框
- elasticsearch - 如何在 Elasticsearch 中一次创建多个索引?
- python - 使用 Groupby 和 sum 在 pandas 中重复操作
- xml - 替换 XSLT 中的“新行”
- download - 如何使用 wget 从不同的目录下载一些带有一些关键字的特定文件?