mongodb(springboot)

1.插入

        1.1.mongoTemplate.save():_id存在时更新数据,不会抛出异常,不支持批量插入。

        1.2.mongoTemplate.insert():_id存在时抛出异常,支持批量插入。


        List list = Arrays.asList(
                new Employee(3,"小红",20,200.50,new Date()),
                new Employee(4,"小李",18,250.50,new Date()),
                new Employee(5,"小杨",17,300.00,new Date()),
                new Employee(6,"小王",15,100.00,new Date())
        );
        //Employee employee = new Employee(2,"小张",25,500.00,new Date());
        Collection insert = mongoTemplate.insert(list, Employee.class);

2.查询文档mongodb(springboot)_第1张图片

         2.1.范围查询gte、lte

//查询薪资大于8000的员工
Query query = new Query(Criteria.where("salary").gte(8000));
List employees = mongoTemplate.find(query, Employee.class);

//查询薪资大于8000小于10000的员工
Query query = new Query(Criteria.where("salary").gte(8000).lte(10000));
List employees = mongoTemplate.find(query, Employee.class);

            2.2.模糊查询  

//模糊查询->查询姓名包含“张”的员工,有其他的需求直接写正则表达式即可
Query query = new Query(Criteria.where("name").regex("张"));
List employees = mongoTemplate.find(query, Employee.class);

              2.3.多条件查询and、or

        //and  or
        Criteria criteria = new Criteria();
        //查询年龄大于20岁且工资低于8000的员工
        criteria.andOperator(Criteria.where("name").lt(20),
                Criteria.where("salasy").lt(8000));
        Query query = new Query(criteria);
        List employees = mongoTemplate.find(query, Employee.class);

                2.4.排序查询 sort

        //and  or
        Criteria criteria = new Criteria();
        //查询年龄大于20岁且工资低于8000的员工
        criteria.andOperator(Criteria.where("name").lt(20),
            Criteria.where("salary").lt(8000));
        Query query = new Query(criteria);

        //sort 排序(对薪资进行降序)
        query.with(Sort.by(Sort.Order.desc("salary")));
        List employees = mongoTemplate.find(query, Employee.class);

                2.5.分页查询

        //and  or
        Criteria criteria = new Criteria();
        //查询年龄大于20岁且工资低于8000的员工
        criteria.andOperator(Criteria.where("name").lt(20),
            Criteria.where("salary").lt(8000));
        Query query = new Query(criteria);

        //sort 排序(对薪资进行降序)
        query.with(Sort.by(Sort.Order.desc("salary")));

        //分页查询
        query.skip(0);//从第0条开始
        query.limit(4);//每页返回4条数据
        List employees = mongoTemplate.find(query, Employee.class);

                2.6.json字符串查询

                        2.6.1等值查询

        String json = "{name:'张三'}";
        Query jsonQuery = new BasicQuery(json);
        List empList = mongoTemplate.find(query, Employee.class);

3.更新文档(先查询后执行)

        3.1.upadateFirst():只更新满足条件的第一条记录

        3.2.updateMulti():更新满足条件的所有记录

        3.3.upSert():没有符合条件的记录则插入 

                            
Query query = new Query(Criteria.where("cid").is(id).and("is_deleted").is(false));
        Update update = new Update();
        update.set("is_deleted",true);
        mongoTemplate.updateMulti(query,update, Resource.class);

4.删除文档

        //删除工资高于8000的员工
        Query removeQuery = new Query(Criteria.where("salary").gt(8000));
        DeleteResult remove = mongoTemplate.remove(new Query(), Employee.class);

5.集合操作mongodb(springboot)_第2张图片

        5.1.单一聚合操作

          db.emp.count() :统计:不忽略过滤条件

              db.emp.estimatedDocumentCount():统计:忽略过滤条件

              db.emp.distinct():去重

        5.2.集合管道mongodb(springboot)_第3张图片    mongodb(springboot)_第4张图片

mongodb(springboot)_第5张图片

mongodb(springboot)_第6张图片  5.2.1.$project:

               (1):投影操作(取别名),将原始字段名投影成指定名称,如将集合中的name投影成noname  ->  db.emp.aggregate([$project:{noname:"$name"}])

 没投影前:mongodb(springboot)_第7张图片

投影后:mongodb(springboot)_第8张图片 

        (2)$project可以灵活的控制输出的格式,也可以剔除不需要的字段->db.emp.aggregate([$project:{noname:"$name",_id:0,age:1}]):0不展示,1展示

        (3)从嵌套文档中排除字段(type字段是一个集合,age为集合里面的一个字段)   ->

db.emp.aggregate([$project:{noname:"$name",_id:0,"type.age":1}])

或者

 db.emp.aggregate([$project:{noname:"$name",_id:0,type:{age:1}}])

5.2.2.$match(涉及到效率,看看下面的文字说明)

 实际上就是精准匹配->查询age等于30的->

 查询age等于30,name包含小的

5.2.3.$count 

 age_count:返回的结果名称

5.2.4.$group

mongodb(springboot)_第9张图片

mongodb(springboot)_第10张图片

5.3.案例:

book的数量,收藏总数和平均值

统计每个作者的book收藏总数  mongodb(springboot)_第11张图片

统计每个作者的每本book的收藏数 mongodb(springboot)_第12张图片 每个作者的book的type合集mongodb(springboot)_第13张图片

 

 

你可能感兴趣的:(java,数据库,服务器)