MongoDb Spring-Data-Mongodb操作MongoDB

主要利用mongodbTemplate 操作

导入Pom:

 <!--spring 操作Mongodb -->
 <dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-mongodb</artifactId>
 </dependency>
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.BulkOperations;
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;

先附上CRUD:

Mongogodb 新增:

@ApiOperation(value = "Mongogodb 新增", notes = "Mongogodb 新增")
@RequestMapping(value = "/mongodbinsert", method = RequestMethod.POST)
    public List<SysUser> mongodbInsert() {
        List<SysUser>listsysuser = new ArrayList<>(3);
        listsysuser.add(new SysUser("12344","男","LJ"));
        listsysuser.add(new SysUser("556667","女","lxd"));
        listsysuser.add(new SysUser("0007","男","lhz"));
        //List<SysUser> insert = (List<SysUser>)mongoTemplate.insert(listsysuser, SysUser.class);
        List<SysUser> insert = (List<SysUser>)mongoTemplate.insert(listsysuser,SysUser.class);
        return insert;
    }

Mongogodb 条件查询:

 @ApiOperation(value = "Mongogodb 根据条件查询", notes = "Mongogodb 根据条件查询")
 @RequestMapping(value = "/mongodbquerybywhy/{userNameInput}/{sexInput}", method = RequestMethod.POST)
    public List<SysUser> mongodbquery(@ApiParam(name = "userNameInput",value = "用户名",required = true) @PathVariable(value = "userNameInput",required = true)String userNameInput,
                                      @ApiParam(name = "sexInput",value = "性别",required = true) @PathVariable(value = "sexInput",required = true)String sexInput) throws UnsupportedEncodingException {
        //new Query(Criteria.where("onumber").is("002").and("cname").is("zcy")) 多条件组合
        //Query query = new Query(Criteria.where("sex").is(sexInput).and(userName).is(userNameInput));
        //上面也可以或者下面的、
        //sexInput = new String(sexInput.getBytes("ISO-8859-1"), "utf8");
        Query query = new Query(Criteria.where("sex").is(sexInput));
        //增加条件
        query.addCriteria(Criteria.where("userName").is(userNameInput));
        //增加排序(倒序)
        //query.with(Sort.by(Sort.Order.desc("ordertime")));
        List<SysUser> list = mongoTemplate.find(query, SysUser.class);
        return list;
    }

Mongogodb 条件修改:

@ApiOperation(value = "Mongogodb 根据条件修改", notes = "Mongogodb 根据条件修改")
@RequestMapping(value = "/mongodbput", method = RequestMethod.PUT)
    public Long mongodbdelete(@ApiParam(name = "userId",value = "用户ID",required = true)
                                           @RequestParam(value = "userId",required = true)String userId) {
        Query query = new Query(Criteria.where("userId").is(userId));
        Update update = new Update().set("userName","gmy");
        UpdateResult updateResult = mongoTemplate.updateFirst(query, update, SysUser.class);
        return updateResult.getModifiedCount();
    }

Mongogodb 根据条件删除

@ApiOperation(value = "Mongogodb 根据条件删除", notes = "Mongogodb 根据条件删除")
@RequestMapping(value = "/mongodbdeletebywhy", method = RequestMethod.DELETE)
    public void mongodbdeletebywhy(@ApiParam(name = "userId",value = "用户ID",required = true)
                              @RequestParam(value = "userId",required = true)String userId) {
        Query query = new Query(Criteria.where("userId").is(userId));
        DeleteResult remove = mongoTemplate.remove(query, SysUser.class);
    }

Mongogodb 批量插入(Bulk):

@ApiOperation(value = "Mongogodb Bulk批量插入", notes = "Mongogodb Bulk批量插入")
@RequestMapping(value = "/mongodbbulkinsert", method = RequestMethod.POST)
    public void mongodbBulkInsert() {
        for (int i=0;i<3;i++) {
            List<Address> listaddresses = new ArrayList<>(3);
            Address address1 = new Address("go", "by", 4);
            Address address2 = new Address("to", "my", 6);
            Address address3 = new Address("school", "self", 7);
            listaddresses.add(address1);
            listaddresses.add(address2);
            listaddresses.add(address3);
            ByMe m1 = new ByMe("hr1", "男1", "lainxi", "17", 30, listaddresses);
            // BulkMode.UNORDERED:表示并行处理,遇到错误时能继续执行不影响其他操作;BulkMode.ORDERED:表示顺序执行,遇到错误时会停止所有执行
            //sysUser1集合名称
            BulkOperations ops = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, "byme");
            ops.insert(m1);
            ops.execute();
        }
    }

Mongogodb 批量插入(insertAll):

@ApiOperation(value = "Mongogodb 批量插入insertAll", notes = "Mongogodb 批量插入insertAll")
@RequestMapping(value = "/mongodbinsertall", method = RequestMethod.POST)
 public List<ByUser> mongodbInsertAll() {
     ByUser m1 = new ByUser("6", "男", "成龙","68","26");
     ByUser m2 = new ByUser("7", "女", "王兴","38","10");
     ByUser m3 = new ByUser("8", "女", "郭富城","98","40");
     List<ByUser> list = new ArrayList<>();
     list.add(m1);
     list.add(m2);
     list.add(m3);
     List<ByUser> sysUsers = (List<ByUser>)mongoTemplate.insertAll(list);
     return sysUsers;
 }

Mongogodb 批量修改:

@ApiOperation(value = "Mongogodb 批量修改", notes = "Mongogodb 批量修改")
@RequestMapping(value = "/mongodbbulkupdate/{userNameInput}/{sexInput}", method = RequestMethod.POST)
    public void mongodbBulkUpdate(@ApiParam(name = "userNameInput",value = "用户名",required = true) @PathVariable(value = "userNameInput",required = true)String userNameInput,
                                  @ApiParam(name = "sexInput",value = "性别",required = true) @PathVariable(value = "sexInput",required = true)String sexInput) {

        Query qsex = new Query(Criteria.where("sex").is(sexInput));
        Update usex = new Update().set("sex","300");

        Query qusername = new Query(Criteria.where("userName").is(userNameInput));
        Update uusername = new Update().set("userName","jkl");

        BulkOperations ops = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, "sysuser");
        ops.updateMulti(qsex,usex).execute();
        ops.updateMulti(qusername,uusername).execute();
    }

Mongogodb 批量删除(Bulk):

@ApiOperation(value = "Mongogodb 批量删除", notes = "Mongogodb 批量删除")
@RequestMapping(value = "/mongodbbulkdelete/{str}", method = RequestMethod.POST)
    public void mongodbBulkDelete(@ApiParam(name = "str",value = "用户多个ID用 ,隔开",required = true)
                                      @PathVariable(value = "str",required = true)String str) {
     String[] split = str.split(",");
      List<Query>list = new ArrayList<>(split.length);
      for (int i=0;i<split.length;i++){
        // quserid.addCriteria(Criteria.where("userId").is(split[i]));
          Query query = new Query(Criteria.where("userId").is(split[i]));
          list.add(query);
      }
      BulkOperations ops = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, "sysuser");
      ops.remove(list).execute();
  }

spring管道Aggregation的条件查询:

@ApiOperation(value = "Mongogodb AggregateGroup 查询", notes = "Mongogodb AggregateGroup 查询")
    @RequestMapping(value = "/mongodbAggregateGroup", method = RequestMethod.GET)
    public List<ByUser> mongodbAggregateGroup() {
        //"userName", "age", "length",
        TypedAggregation<ByUser> basicDBObjectTypedAggregation = newAggregation(
                //输入类型  写不写都行!!!
                ByUser.class,
                //展示的字段,若不展示则显示为null。
                project("userId","sex", "userName", "age", "length"),
                group("userId","sex")
                    //first分组字段排序后获取其第一个值
                     .first("sex").as("sex"),
                sort(Sort.Direction.ASC,"userId"),
                match(Criteria.where("sex").is("男"))
         );
        //ByUser.class 输出类型
        AggregationResults<ByUser> aggregate = mongoTemplate.aggregate(basicDBObjectTypedAggregation, ByUser.class);
        return aggregate.getMappedResults();
    }

输出:

 /* 输出
 [
    {
        "userId": "3",
        "sex": "男",
        "userName": "连喜灯",
        "age": null,
        "length": null
    },
    {
        "userId": "4",
        "sex": "男",
        "userName": "连喜灯",
        "age": null,
        "length": null
    }
]

project:只是把字段在管道中传下去,因为字段需要进行别的一下操作,比如排序,分组等。
group:分组,最终决定展示哪些字段的值(若group中少哪些字段则显示为null)

@ApiOperation(value = "Mongogodb AggregateGroup previousOperation()查询", notes = "Mongogodb AggregateGroup previousOperation()查询")
@RequestMapping(value = "/mongodbGetPreviousOperation", method = RequestMethod.GET)
    public List<ByUser> mongodbGetPreviousOperation() {
        //"userName", "age", "length",
        TypedAggregation<ByUser> basicDBObjectTypedAggregation = newAggregation(
                //输入类型  不写只是返回值变了!!!
                ByUser.class,
                //gt  大于   gte大于等于   lt 小于   lte 小于等于
                match(Criteria.where("length").gt("19")),
                //first 获取到某个字段一般与as一块用
                //group("age","length").count().as("num"),
                group("age","length").sum("age").as("num").sum("length").as("length"),
                //and 获取到某个字段一般与as一块用  总感觉和first 差不多
                //and("age").previousOperation()  一般是跟随project方法,and 和 previousOperation一块用
                project("num"),
                sort(Sort.Direction.DESC,"num")
        );
        //ByUser.class 输出类型
        AggregationResults<ByUser> aggregate = mongoTemplate.aggregate(basicDBObjectTypedAggregation, ByUser.class);
        return aggregate.getMappedResults();
    }

输出:

[
        {
            "userId": null,
                "sex": null,
                "userName": null,
                "age": "98",
                "length": "40"
        },
        {
            "userId": null,
                "sex": null,
                "userName": null,
                "age": "68",
                "length": "26"
        }
 ]

1:gt 大于 gte大于等于 lt 小于 lte 小于等于
2:and()一般和as()结合用,and()写的是前一个操作的字段,as()给这个字段起一个别名,可用于管道中下一个操作的字段别名。
3:previousOperation() 和unwind自己不是很明白!!!!

发布了246 篇原创文章 · 获赞 12 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_41987908/article/details/105178723