Spring boot 2.0 mongoTemplate 操作范例
1.1. 导入与模板相关的包
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
注入 MongoTemplate 对象
@Autowiredprivate MongoTemplate mongoTemplate;
1.2.1. Save 保存
User user = new User();
user.setName("Netkiller");
mongoTemplate.save(user, "user");
更新数据
user = mongoTemplate.findOne(Query.query(Criteria.where("name").is("Jam")), User.class);
user.setName("Neo");
mongoTemplate.save(user, "user");
1.2.2 Insert
User user = new User();
user.setName("Neo");
mongoTemplate.insert(user, "user");
BSONObject personBsonObj = BasicDBObjectBuilder.start().add("name","Neo Chen").add("age",27).add("address",null).get();mongoTemplate.insert(personBsonObj,"personCollection");
document in the db:
db.personCollection.findOne().pretty();
{"age":21,"name":"John Doe";"address":null}*
1.2.3. 更新第一条
Query query = new Query();
query.addCriteria(Criteria.where("name").is("Neo"));
Update update = new Update();
update.set("name", "Netkiller");
mongoTemplate.updateFirst(query, update, User.class);
1.2.4. 更新所有数据
Query query = new Query();
query.addCriteria(Criteria.where("name").is("Neo"));
Update update = new Update();
update.set("name", "Jerry");
mongoTemplate.updateMulti(query, update, User.class);
1.2.5. 查找并保存
Query query = new Query();
query.addCriteria(Criteria.where("name").is("Luck"));
Update update = new Update();
update.set("name", "Lisa");
User user = mongoTemplate.findAndModify(query, update, User.class);
1.2.6. upsert
Query query = new Query();
query.addCriteria(Criteria.where("name").is("Green"));
Update update = new Update();
update.set("name", "Tom");
mongoTemplate.upsert(query, update, User.class);
1.2.7. 删除
User user = new User();
user.setId("5bbf091efd9557069c4a25c5")
mongoTemplate.remove(user, "user");
1.2.8. 查找一条数据
public Person findOneByName(String name) {Query query = new Query();query.addCriteria(Criteria.where("name").is(name));return mongoTemplate.findOne(query, Person.class);
}
1.2.9. 查找所有数据
public List<Person> findByName(String name) {Query query = new Query();query.addCriteria(Criteria.where("name").is(name));return mongoTemplate.find(query, Person.class);
}
2.0. Query
2.1.1. 翻页
public List<Person> getAllPersonPaginated(int pageNumber, int pageSize) {Query query = new Query();query.skip(pageNumber * pageSize);query.limit(pageSize);return mongoTemplate.find(query, Person.class);
}
2.1.2. between
实现一个区间条件 new Criteria(“createdDate”).gte(beginDate).lte(endDate)
public boolean AccountDeposit(Date beginDate, Date endDate) {MatchOperation matchOperation = match(new Criteria("createdDate").gte(beginDate).lte(endDate));GroupOperation groupOperation = group("loginname").sum("amount").as("amount");SortOperation sortOperation = sort(new Sort(Direction.ASC, "loginname"));Aggregation aggregation = newAggregation(matchOperation, groupOperation, sortOperation);AggregationResults<AccountSettlementDetails> results = mongoTemplate.aggregate(aggregation, AccountSettlementDetails.class, AccountSettlementDetails.class);if (results.getMappedResults() != null) {log.info(results.getRawResults().get("result").toString());for (AccountSettlementDetails settlementDetails : results.getMappedResults()) {log.info("{}", settlementDetails.toString());}}return true;}
3.0. Criteria
3.1.1. is
Query query = new Query();
query.addCriteria(Criteria.where("name").is("Neo"));
List<User> users = mongoTemplate.find(query, User.class);
3.1.2. Regex 正则表达式搜索
查询以N开头的名字
Query query = new Query();
query.addCriteria(Criteria.where("name").regex("^N"));
List<User> users = mongoTemplate.find(query,User.class);
查询以o结尾的名字
Query query = new Query();
query.addCriteria(Criteria.where("name").regex("o$"));
List<User> users = mongoTemplate.find(query, User.class);
3.1.3. lt 和 gt
查询年龄小于 < 30 并 > 20 的用户
Query query = new Query();
query.addCriteria(Criteria.where("age").lt(30).gt(20));
List<User> users = mongoTemplate.find(query,User.class);
查找日期范围
Date start = DateUtil.convertStringToDateTime("2014-02-10 20:38:44");
Date end = DateUtil.convertStringToDateTime("2014-02-10 20:38:50");Query query = new Query();
Criteria criteria = Criteria.where("delflag").is(false);
criteria.and("modifyDate").gte(start).lte(end);
query.addCriteria(criteria);
query.limit(10);
3.1.4.
<programlisting><![CDATA[
Query query = new Query();
query.addCriteria(new Criteria().andOperator(Criteria.where("field1").exists(true),Criteria.where("field1").ne(false))
);List<Foo> result = mongoTemplate.find(query, Foo.class);
System.out.println("query - " + query.toString());for (Foo foo : result) {System.out.println("result - " + foo);
}
3.1.5. 包含
public List<Person> findByFavoriteBooks(String favoriteBook) {Query query = new Query();query.addCriteria(Criteria.where("favoriteBooks").in(favoriteBook));return mongoTemplate.find(query, Person.class);
}
4.0. Update
4.1.1. set
Update update = new Update();
update.set("name", "Netkiller");
4.1.2. 追加数据
Query query = Query.query(Criteria.where("id").is("5bbf091efd9557069c4a25c5"));Update update = new Update().push("author", new Author("neo", "chen"));mongoTemplate.updateFirst(query, update, Article.class);
4.1.3. 更新数据
Query query = Query.query(Criteria.where("classId").is("1").and("Students.studentId").is("1"));Update update = Update.update("Students.$.name", "lisa");mongoTemplate.upsert(query, update, "class");
4.1.4. 删除数据
Query query = Query.query(Criteria.where("classId").is("1").and("Students.studentId").is("3"));Update update = new Update();update.unset("Students.$");mongoTemplate.updateFirst(query, update, "class");
4.1.5. inc
public void updateMultiplePersonAge() {Query query = new Query();Update update = new Update().inc("age", 1);mongoTemplate.findAndModify(query, update, Person.class);;
}
4.1.6. update.addToSet
Query query = Query.query(Criteria.where("classId").is("1"));
Student student = new Student("1", "lisa", 3, "girl");
Update update = new Update();
update.addToSet("Students", student);
mongoTemplate.upsert(query, update, "class");
4.1.7. Sort
按照年龄排序
Query query = new Query();
query.with(new Sort(Sort.Direction.ASC, "age"));
List<User> users = mongoTemplate.find(query,User.class);
4.1.8. Query + PageRequest
final Pageable pageableRequest = new PageRequest(0, 2);
Query query = new Query();
query.with(pageableRequest);
4.1.9. newAggregation
MultilevelDirectSellingAccountRewardsSettlementDetails multilevelDirectSellingAccountRewardsSettlementDetails = new MultilevelDirectSellingAccountRewardsSettlementDetails();multilevelDirectSellingAccountRewardsSettlementDetails.setLoginname("111");multilevelDirectSellingAccountRewardsSettlementDetails.setPhone("111");multilevelDirectSellingAccountRewardsSettlementDetails.setRecommenderLoginname("111");multilevelDirectSellingAccountRewardsSettlementDetails.setRecommenderPhone("111");multilevelDirectSellingAccountRewardsSettlementDetails.setRecommenderName("Neo");multilevelDirectSellingAccountRewardsSettlementDetails.setRecommenderType("客户");multilevelDirectSellingAccountRewardsSettlementDetails.setAmount(5.02);multilevelDirectSellingAccountRewardsSettlementDetails.setCreatedDate(new Date());multilevelDirectSellingAccountRewardsSettlementDetailsRepository.save(multilevelDirectSellingAccountRewardsSettlementDetails);Date beginDate = this.getToday("00:00:00");Date endDate = this.getToday("23:59:59");log.info(beginDate.toString() + " ~ " + endDate.toString());GroupOperation groupOperation = group("loginname").sum("amount").as("amount");MatchOperation matchOperation = match(new Criteria("createdDate").gte(beginDate).lte(endDate));SortOperation sortOperation = sort(new Sort(Direction.ASC, "loginname"));Aggregation aggregation = newAggregation(matchOperation, groupOperation, sortOperation);AggregationResults<MultilevelDirectSellingAccountRewardsSettlementDetails> results = mongoTemplate.aggregate(aggregation, MultilevelDirectSellingAccountRewardsSettlementDetails.class, MultilevelDirectSellingAccountRewardsSettlementDetails.class); System.out.println(results.getRawResults().get("result").toString());
5.0. 创建索引
mongoOps.indexOps(User.class).ensureIndex(new Index().on("name", Direction.ASC));
5.1.1. 子对象操作
5.1.2. List 类型
package cn.netkiller.api.domain;import java.util.List;import javax.persistence.Id;
import org.springframework.data.mongodb.core.mapping.Document;@Document
public class Article {@Idprivate String id;private String title;private String description;List<Author> author;public static class Author {private String id;private String firstname;private String lastname;public Author(String firstname, String lastname) {this.firstname = firstname;this.lastname = lastname;}}
}
更新
db.getCollection('foo').update({"author.firstname":"neo"},{"$set":{"author.$.firstname":"netkiller"}})
更新数据
Query query = Query.query(Criteria.where("author.firstname").is("neo"));Update update = new Update().set("author.$.firstname", "netkiller");mongoTemplate.updateFirst(query, update, Article.class);
追加数据
Query query = Query.query(Criteria.where("id").is("5bbf091efd9557069c4a25c5"));Update update = new Update().push("author", new Author("neo", "chen"));mongoTemplate.updateFirst(query, update, Article.class);
删除数据
Query query = Query.query(Criteria.where("id").is("5bbf091efd9557069c4a25c5"));Update update = new Update().pull("author", new Author("jerry", "lee"));mongoTemplate.updateFirst(query, update, Article.class);
TODO.持续更新
Spring boot 2.0 mongoTemplate 操作范例相关推荐
- 《Netkiller Spring Cloud 手札》Spring boot 2.0 mongoTemplate 操作范例
2019独角兽企业重金招聘Python工程师标准>>> 本文节选自 <Netkiller Spring Cloud 手札> Netkiller Spring Cloud ...
- 《Netkiller Spring Cloud 手札》之 Spring Cloud Consol
2019独角兽企业重金招聘Python工程师标准>>> Netkiller Spring Cloud 手札 Spring Cloud Cookbook Mr. Neo Chan, 陈 ...
- 《Netkiller Spring Cloud 手札》之 Master / Slave 主从数据库数据源配置
2019独角兽企业重金招聘Python工程师标准>>> Netkiller Spring Cloud 手札 Spring Cloud Cookbook Mr. Neo Chan, 陈 ...
- Spring Cloud与Spring Boot版本匹配关系
Spring Cloud与Spring Boot版本匹配关系 Spring Cloud与Spring Boot版本匹配关系 Spring Cloud Spring Boot Finchley 兼容Sp ...
- 视频教程-spring cloud与spring boot实战视频教程-Java
spring cloud与spring boot实战视频教程 从事互联网开发架构11年,曾在阿里任职java架构师,擅长SOA.分布式搜索的架构设计; 精于JVM.TCP.CPU.缓存.磁盘.网络等大 ...
- 电子商务商城源码 Spring Cloud、Spring Boot、Mybatis、Redis
1. 涉及平台 Spring Cloud.Spring Boot.Mybatis.Redis 2. 核心架构 Spring Cloud.Spring Boot.Mybatis.Redis 3. 前端框 ...
- 分布式 Spring Cloud 基于 Spring Boot 开发一整套
Spring Boot的工程包括: - Spring IO Platform:用于版本化应用程序的企业级分发. - Spring Framework:用于事务管理.依赖注入.数据访问.消息传递和W ...
- Spring Cloud、Spring Cloud Alibaba、Spring Boot版本对应关系
目录 Spring Cloud.Spring Cloud Alibaba.Spring Boot版本对应关系 Spring Cloud Alibaba组件版本对应关系 官网文档链接 Spring Cl ...
- Spring Cloud教程– Spring Cloud Config Server简介
问题 SpringBoot在通过属性或YAML文件外部化配置属性方面提供了很大的灵活性. 我们还可以使用特定于配置文件的配置文件(例如application.properties , applicat ...
最新文章
- 在 Linux 上用 dust 代替 du更直观
- Log4j2再发新版本2.16.0,完全删除Message Lookups的支持,加固漏洞防御!
- python3列表推导式
- 个人博客 | 网站部署终极操作:一行命令搞定!
- R语言与Shapiro正态性检验
- android 弹出框带标题栏,Android开发靠标题栏的弹框
- TypeScript和vuejs 搭建webpack,初次体验
- Could not resolve placeholder jdbc.driver in string value ${jdbc.driver}
- centos在文本中搜索字符串_Google和Baidu的搜索技巧你会吗?
- BAT判断一个目录是否存在
- junit测试mysql_使用Junit单元测试及操作MySQL数据库时出现错误及解决方法
- Docer容器客户端在启动的镜像的时候报错Error invoking remote method ‘docker-start-container‘: Error: (HTTP code 500
- Python爬虫技巧--selenium解除webdriver特征值
- excle2010 一张图上画两种类型的图:折线图+柱形图
- Excel 相同名称或ID的 内容 合并起来 同列不同内容剃加
- 在markdown中控制文字的颜色,背景色,字体大小,字体样式及颜色RGB转换工具链接
- java swing+mysql简单零件销售管理系统、订货决策系统
- 【代码】HTML网站维护更新简易单页源码
- 无意中看到,有一些感受。。。
- greenplum常用的gp_toolkit监控语句