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"));
        });
    }

 

posted @ 2023-05-04 16:49  薛大坑  阅读(255)  评论(0编辑  收藏  举报