mongodb(springboot)

1.插入

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

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


        List<Employee> 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<Employee> insert = mongoTemplate.insert(list, Employee.class);

2.查询文档

         2.1.范围查询gte、lte

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

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

            2.2.模糊查询  

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

                2.6.json字符串查询

                        2.6.1等值查询

        String json = "{name:'张三'}";
        Query jsonQuery = new BasicQuery(json);
        List<Employee> 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.集合操作

        5.1.单一聚合操作

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

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

              db.emp.distinct():去重

        5.2.集合管道    

  5.2.1.$project:

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

 没投影前:

投影后: 

        (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

5.3.案例:

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

统计每个作者的book收藏总数  

统计每个作者的每本book的收藏数  每个作者的book的type合集

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值