SpringBoot:MongoDB使用示例

pom.xml

		<dependency>
			<groupId>org.springframework.data</groupId>
			<artifactId>spring-data-mongodb</artifactId>
		</dependency>

application.yml

spring:
  data:
    mongodb:
      database: zhou_test
      host: localhost
      port: 27017

实体类

import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;

@Data
public class MovieRanking {

    @JSONField(name = "id")
    private Integer id;

    @JSONField(name = "name")
    private String name;

    @JSONField(name = "genre_main")
    private String genreMain;

    @JSONField(name = "box_office")
    private String boxOffice;

    @JSONField(name = "area")
    private String area;

    @JSONField(name = "release_time")
    private String releaseTime;

}

增删改

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import com.spring.boot.StartApplication;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
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;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.ArrayList;
import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = StartApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class MongoUpdateTest {

    /**
     * 表名
     */
    private static final String COLLECTION_NAME = "movie_ranking";

    @Autowired
    private MongoTemplate mongoTemplate;

    @Test
    public void save() {
        String str = "[{\"area\":\"中国\",\"box_office\":\"56.7927\",\"genre_main\":\"动作\",\"id\":1,\"name\":\"战狼2\",\"release_time\":\"2017-07-27\"}," +
                "{\"area\":\"中国\",\"box_office\":\"49.7351\",\"genre_main\":\"动画\",\"id\":2,\"name\":\"哪吒之魔童降世\",\"release_time\":\"2019-07-26\"}," +
                "{\"area\":\"中国\",\"box_office\":\"46.5592\",\"genre_main\":\"科幻\",\"id\":3,\"name\":\"流浪地球\",\"release_time\":\"2019-02-05\"}," +
                "{\"area\":\"美国\",\"box_office\":\"42.4088\",\"genre_main\":\"动作\",\"id\":4,\"name\":\"复仇者联盟4:终局之战\",\"release_time\":\"2019-04-24\"}," +
                "{\"area\":\"中国/中国香港\",\"box_office\":\"36.5079\",\"genre_main\":\"动作\",\"id\":5,\"name\":\"红海行动\",\"release_time\":\"2018-02-16\"}," +
                "{\"area\":\"中国\",\"box_office\":\"33.9769\",\"genre_main\":\"喜剧\",\"id\":6,\"name\":\"唐人街探案2\",\"release_time\":\"2018-02-16\"}," +
                "{\"area\":\"中国/中国香港\",\"box_office\":\"33.9211\",\"genre_main\":\"喜剧\",\"id\":7,\"name\":\"美人鱼\",\"release_time\":\"2016-02-08\"}," +
                "{\"area\":\"中国\",\"box_office\":\"30.9996\",\"genre_main\":\"剧情\",\"id\":8,\"name\":\"我不是药神\",\"release_time\":\"2018-07-05\"}," +
                "{\"area\":\"中国\",\"box_office\":\"27.7534\",\"genre_main\":\"剧情\",\"id\":9,\"name\":\"我和我的祖国\",\"release_time\":\"2019-09-30\"}," +
                "{\"area\":\"中国\",\"box_office\":\"27.1721\",\"genre_main\":\"剧情\",\"id\":10,\"name\":\"中国机长\",\"release_time\":\"2019-09-30\"}]";
        JSONArray jsonArr = JSON.parseArray(str);
        List<MovieRanking> movieList = new ArrayList<>();
        for (int i = 0; i < jsonArr.size(); i++) {
            JSONObject json = jsonArr.getJSONObject(i);
            MovieRanking movie = new MovieRanking();
            movie.setId(json.getInteger("id"));
            movie.setName(json.getString("name"));
            movie.setGenreMain(json.getString("genre_main"));
            movie.setBoxOffice(json.getString("box_office"));
            movie.setArea(json.getString("area"));
            movie.setReleaseTime(json.getString("release_time"));
            movieList.add(movie);
        }
        mongoTemplate.insert(movieList, COLLECTION_NAME);
    }

    @Test
    public void update() {
        Query query = new Query(Criteria.where("id").is(2));
        Update update = new Update().set("address", "武汉");
        // 只更新查到的数据
        UpdateResult result = mongoTemplate.updateMulti(query, update, COLLECTION_NAME);
        // 有则更新,无则插入
        // UpdateResult result = mongoTemplate.upsert(query, update, "user_info");
        System.out.println("匹配记录数:" + result.getMatchedCount());
        System.out.println("修改记录数:" + result.getModifiedCount());
    }

    @Test
    public void remove() {
        Query query = new Query(Criteria.where("id").is(1));
        DeleteResult result = mongoTemplate.remove(query, COLLECTION_NAME);
        System.out.println("删除记录数:" + result.getDeletedCount());
    }

}

import com.alibaba.fastjson.JSONObject;
import com.spring.boot.StartApplication;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.mapreduce.GroupBy;
import org.springframework.data.mongodb.core.mapreduce.GroupByResults;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
import java.util.regex.Pattern;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = StartApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class MongoQueryTest {

    private static final String COLLECTION_NAME = "movie_ranking";

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * 功能描述:
     * <全部查询>
     *
     *
     * @return void
     * @author zhoulipu
     * @date   2019/10/23 15:58
     */
    @Test
    public void findAll() {
        List<MovieRanking> movieList = mongoTemplate.findAll(MovieRanking.class, COLLECTION_NAME);
        System.out.println(JSONObject.toJSONString(movieList));
    }

    /**
     * 功能描述:
     * <多条件查询>
     *
     *
     * @return void
     * @author zhoulipu
     * @date   2019/10/23 15:59
     */
    @Test
    public void findWhere() {
        Query query = new Query(new Criteria().orOperator(Criteria.where("id").lte(3), Criteria.where("releaseTime").regex(like("2019"))));
        order(query, getOrder("id", true), null);
        limit(query, 1, 5);
        List<MovieRanking> movieList = mongoTemplate.find(query, MovieRanking.class, COLLECTION_NAME);
        System.out.println(JSONObject.toJSONString(movieList));
        group(null, "area", new MovieRanking());
        distinct(null, "area", new MovieRanking());
    }

    /**
     * 功能描述:
     * <模糊查询>
     *
     * @param  name 1
     * @return java.util.regex.Pattern
     * @author zhoulipu
     * @date   2019/10/23 15:56
     */
    private Pattern like(String name) {
        // ".*": 模糊匹配的位置
        // Pattern.CASE_INSENSITIVE 忽略大小写
        return Pattern.compile("^.*" + name + ".*$", Pattern.CASE_INSENSITIVE);
    }

    /**
     * 功能描述:
     * <排序参数>
     *
     * @param  name 1
     * @param  isAsc 2
     * @return org.springframework.data.domain.Sort.Order
     * @author zhoulipu
     * @date   2019/10/23 15:56
     */
    private Sort.Order getOrder(String name, boolean isAsc) {
        return new Sort.Order(isAsc ? Sort.Direction.ASC : Sort.Direction.DESC, name);
    }

    /**
     * 功能描述:
     * <当前不支持中文排序>
     *
     * @param query 1
     * @param order 2
     * @return void
     * @author zhoulipu
     * @date 2019/10/21 17:02
     */
    private void order(Query query, Sort.Order order, List<Sort.Order> orders) {
        Sort sort = order != null ? Sort.by(order) : Sort.by(orders);
        query.with(sort);
    }

    /**
     * 功能描述:
     * <分页>
     *
     * @param  query 1
     * @param  page 2
     * @param  size 3
     * @return void
     * @author zhoulipu
     * @date   2019/10/23 15:56
     */
    private void limit(Query query, int page, int size) {
        // 这里的分页从0开始
        Pageable pageable = PageRequest.of(page - 1, size);
        query.with(pageable);
    }

    /**
     * 功能描述:
     * <分组>
     *
     * 1.key:用来分组文档的字段。和keyf两者必须有一个
     * 2.keyf:可以接受一个javascript函数。用来动态的确定分组文档的字段。和key两者必须有一个
     * 3.initial:reduce中使用变量的初始化
     * 4.reduce:执行的reduce函数。函数需要返回值。
     * 5.cond:执行过滤的条件。
     * 6.finallize:在reduce执行完成,结果集返回之前对结果集最终执行的函数。可选的。
     *
     * @param  criteria 1
     * @param  name 2
     * @param  obj 3
     * @return void
     * @author zhoulipu
     * @date   2019/10/23 0:36
     */
    private void group(Criteria criteria, String name, Object obj) {
        GroupBy groupBy = new GroupBy(name)
                .initialDocument("{count:0}")
                .reduceFunction("function(doc, result){result.count++}");
        criteria = criteria == null ? new Criteria() : criteria;
        GroupByResults results = mongoTemplate.group(criteria, COLLECTION_NAME, groupBy, obj.getClass());
        List<Object> list = (List<Object>) results.getRawResults().get("retval");
        System.out.println(JSONObject.toJSONString(list));
    }

    /**
     * 功能描述:
     * <去重>
     *
     * @param  query 1
     * @param  name 2
     * @param  obj 3
     * @return void
     * @author zhoulipu
     * @date   2019/10/23 15:48
     */
    private void distinct(Query query, String name, Object obj) {
        query = query == null ? new Query():query;
        List<Object> objs = mongoTemplate.findDistinct(query, name, COLLECTION_NAME, obj.getClass(), Object.class);
        System.out.println(JSONObject.toJSONString(objs));
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值