springboot与mongodb之增删改查(三)
一、引用mongoTemplate
@Resource private MongoTemplate mongoTemplate;
二、分页查询
public void testPage() { int pageNum = 1; int pageSize = 10; // 添加查询条件 Criteria criteria = new Criteria(); criteria.and("code").is("123"); Query query = new Query(criteria); // 查询总数,dbName要查询的集合名称 long total = mongoTemplate.count(query, "dbName"); // 设置分页 this.start(pageNum, pageSize, query); // Map为映射对象 List<Map> maps = mongoTemplate.find(query, Map.class, "dbName"); // 组装分页结果 Page<Map> page = new Page<>(); page.setCurrent(pageNum); page.setPages(pageSize); page.setTotal(total); page.setRecords(maps); }
/** *设置分页参数 * * @param currentPage 当前页数 * @param pageSize 每页行数 * @param query 查询条件 */ private void start(Integer currentPage, Integer pageSize, Query query) { query.limit(pageSize); query.skip((long) (currentPage - 1) * pageSize); }
注:示例中使用的分页对象Page是mybtis-plus的com.baomidou.mybatisplus.extension.plugins.pagination.Page。也可自行创建对象接收
三、保存数据
// 比较简单,data即为对象或者对象的集合
Data data = new Data();
data.setCode("123");
data.setName("测试"); mongoTemplate.insert(data, dbName);
四、修改数据
public void testUpdate() { // 设置修改内容 Update update = new Update(); update.set("name", "测试2222"); // 创建查询条件 Criteria criteria = Criteria.where("code").in("123"); Query updateQuery = new Query(criteria); // 更新数据 mongoTemplate.updateMulti(updateQuery, update, "dbName"); }
五、删除数据
public void testDelete() { // 创建删除条件 Criteria criteria = Criteria.where("code").in("123"); Query deleteQuery = new Query(criteria); // 删除数据 mongoTemplate.remove(deleteQuery, "dbName"); }
六、聚合查询
注:聚合函数只能对数字类型的字段进行操作
// 以平均查询为样例,聚合操作只支持数字类型的字段 public void testAvg() { // 聚合集合 List<AggregationOperation> operations = new ArrayList<>(); // 查询条件 Criteria criteria = Criteria.where("code").in("123"); MatchOperation match = Aggregation.match(criteria); // 设置分组条件,样例没有设置分组条件 GroupOperation group = Aggregation.group(); // 聚合操作 group = group.avg("number1").as("avg").sum("number2").as("sum"); operations.add(match); operations.add(group); Aggregation aggregation = Aggregation.newAggregation(operations); List<Map> aggregateList = mongoTemplate.aggregate(aggregation, "dbName", Map.class).getMappedResults(); aggregateList.forEach(map -> { System.out.println(map.get("avg")); System.out.println(map.get("sum")); }); }