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);
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;
@Test
public void findAll() {
List<MovieRanking> movieList = mongoTemplate.findAll(MovieRanking.class, COLLECTION_NAME);
System.out.println(JSONObject.toJSONString(movieList));
}
@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());
}
private Pattern like(String name) {
return Pattern.compile("^.*" + name + ".*$", Pattern.CASE_INSENSITIVE);
}
private Sort.Order getOrder(String name, boolean isAsc) {
return new Sort.Order(isAsc ? Sort.Direction.ASC : Sort.Direction.DESC, name);
}
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);
}
private void limit(Query query, int page, int size) {
Pageable pageable = PageRequest.of(page - 1, size);
query.with(pageable);
}
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));
}
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));
}
}