Spring Boot 에서 빠 른 조작 Mongodb 데이터베이스 안내

머리말
Spring Boot 에 Mongodb 를 통합 하 는 것 은 매우 간단 합 니 다.Mongodb 의 Starter 가방 만 가입 하면 됩 니 다.코드 는 다음 과 같 습 니 다.

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
그리고 Mongodb 의 연결 정 보 를 설정 합 니 다:

spring.data.mongodb.uri=mongodb://192.168.0.13/test
전체 설정 정 보 는 아래 를 참고 하 십시오.

spring.data.mongodb.authentication-database= # Authentication database name.
spring.data.mongodb.database= # Database name.
spring.data.mongodb.field-naming-strategy= # Fully qualified name of the FieldNamingStrategy to use.
spring.data.mongodb.grid-fs-database= # GridFS database name.
spring.data.mongodb.host= # Mongo server host. Cannot be set with URI.
spring.data.mongodb.password= # Login password of the mongo server. Cannot be set with URI.
spring.data.mongodb.port= # Mongo server port. Cannot be set with URI.
spring.data.mongodb.repositories.type=auto # Type of Mongo repositories to enable.
spring.data.mongodb.uri=mongodb://localhost/test # Mongo database URI. Cannot be set with host, port and credentials.
spring.data.mongodb.username= # Login user of the mongo server. Cannot be set with URI.
설정 이 되 어 있 으 면 바로 MongoTemplate 작업 데 이 터 를 주입 할 수 있 습 니 다.
데이터 추가
먼저 실체 클래스 를 만 듭 니 다.우 리 는 문장 으로 실체 클래스 를 만 들 고 다음 필드 를 정의 합 니 다.

import java.util.Date;
import java.util.List;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
/**
 *     
 * @author yinjihuan
 *
 */
@Document(collection = "article_info")
public class Article {
    @Id
    private String id;
    @Field("title")
    private String title;
    @Field("url")
    private String url;
    @Field("author")
    private String author;
    @Field("tags")
    private List<String> tags;
    @Field("visit_count")
    private Long visitCount;
    @Field("add_time")
    private Date addTime;
    
    //  get set  
}
실체 클래스 의 주 해 는 다음 과 같다.
1.Document 주해 표 지 는 하나의 문서 로 my sql 의 표 와 같 습 니 다.collection 값 은 mongodb 에서 집합 한 이름 을 표시 하고 기본 값 은 실체 이름 article 이 라 고 쓰 지 않 습 니 다.
2.Id 주 해 를 주 키 표식 으로 한다
3.Field 주 해 는 필드 표지 이 고 지정 값 은 필드 이름 입 니 다.여기 에는 작은 기술 이 있 습 니 다.모든 spring-data.mongodb 에 이러한 주 해 는 사용자 가 필드 이름 을 사용자 정의 할 수 있 도록 실체 류 와 일치 하지 않 을 수 있 습 니 다.그리고 장점 은 줄 임 말 을 사용 할 수 있 습 니 다.예 를 들 어 username 보다 unane 또는 un 으로 설정 할 수 있 습 니 다.이러한 장점 은 저장 공간 을 절약 하 는 것 입 니 다.mongodb 의 저장 방식 은 key value 형식 으로 모든 key 는 중복 저장 되 고 key 는 사실은 큰 저장 공간 을 차지한다.
다음은 데이터 베 이 스 를 조작 할 수 있 습 니 다.이어서 지난번 에는 테스트 클래스 에 코드 를 쓸 수 있 습 니 다.

@Autowired
private MongoTemplate mongoTemplate;

/**
 *        
 * @author yinjihuan
 */
public static void initArticle() {
    //    
    for (int i = 0; i < 10; i++) {
        Article article = new Article();
        article.setTitle("MongoTemplate     ");
	    article.setAuthor("yinjihuan");
	    article.setUrl("http://cxytiandi.com/blog/detail/" + i);
	    article.setTags(Arrays.asList("java", "mongodb", "spring"));
	    article.setVisitCount(0L);
	    article.setAddTime(new Date());
	    mongoTemplate.save(article);
    }
    
    //    
    List<Article> articles = new ArrayList<>(10);
    for (int i = 0; i < 10; i++) {
	    Article article = new Article();
	    article.setTitle("MongoTemplate     ");
	    article.setAuthor("yinjihuan");
	    article.setUrl("http://cxytiandi.com/blog/detail/" + i);
	    article.setTags(Arrays.asList("java", "mongodb", "spring"));
	    article.setVisitCount(0L);
	    article.setAddTime(new Date());
	    articles.add(article);
    }
    mongoTemplate.insert(articles, Article.class);
  
}
데이터 양 이 많은 상황 에서 대량으로 추가 하면 성능 이 더욱 좋 습 니 다.
삭제 작업

//  author yinjihuan   
Query query = Query.query(Criteria.where("author").is("yinjihuan"));
mongoTemplate.remove(query, Article.class);

//            ,           article_info
query = Query.query(Criteria.where("author").is("yinjihuan"));
mongoTemplate.remove(query, "article_info");

//    ,     ,      
mongoTemplate.dropCollection(Article.class);
mongoTemplate.dropCollection("article_info");

//     
mongoTemplate.getDb().dropDatabase();
다음 두 가 지 는 삭 제 된 데이터 가 어떤 장면 이 있 는 지 알 아야 한다.예 를 들 어 삭 제 된 기록 을 기록 하 는 것 이다.

//             ,           ,       
query = Query.query(Criteria.where("author").is("yinjihuan"));
Article article = mongoTemplate.findAndRemove(query, Article.class);

//            ,             
query = Query.query(Criteria.where("author").is("yinjihuan"));
List<Article> articles = mongoTemplate.findAllAndRemove(query, Article.class);
조작 을 수정 하 다
우선 수정 할 데 이 터 를 초기 화 합 니 다.

{
    "_id": ObjectId("57c43caed4c63d7e39b5dc48"),
    "title": "MongoTemplate     ",
    "url": "http://cxytiandi.com/blog/detail/0",
    "author": "yinjihuan",
    "tags": [
        "java",
        "mongodb",
        "spring"
    ],
    "visit_count": 0,
    "add_time": ISODate("2016-08-29T13:46:21.881Z")
}
{
    "_id": ObjectId("57c43caed4c63d7e39b5dc49"),
    "title": "MongoTemplate     ",
    "url": "http://cxytiandi.com/blog/detail/1",
    "author": "yinjihuan",
    "tags": [
        "java",
        "mongodb",
        "spring"
    ],
    "visit_count": 0,
    "add_time": ISODate("2016-08-29T13:46:22.201Z")
}

//     author yinjihuan     title visitCount
Query query = Query.query(Criteria.where("author").is("yinjihuan"));
Update update = Update.update("title", "MongoTemplate").set("visitCount", 10);
mongoTemplate.updateFirst(query, update, Article.class);
수정 후 결 과 는 다음 과 같 습 니 다.첫 번 째 데이터 의 title 과 visit 를 발견 할 수 있 습 니 다.count 가 수정 되 었 습 니 다.

{
    "_id": ObjectId("57c43caed4c63d7e39b5dc48"),
    "title": "MongoTemplate",
    "url": "http://cxytiandi.com/blog/detail/0",
    "author": "yinjihuan",
    "tags": [
        "java",
        "mongodb",
        "spring"
    ],
    "visit_count": 10,
    "add_time": ISODate("2016-08-29T13:46:21.881Z")
}
{
    "_id": ObjectId("57c43caed4c63d7e39b5dc49"),
    "title": "MongoTemplate     ",
    "url": "http://cxytiandi.com/blog/detail/1",
    "author": "yinjihuan",
    "tags": [
        "java",
        "mongodb",
        "spring"
    ],
    "visit_count": 0,
    "add_time": ISODate("2016-08-29T13:46:22.201Z")
}

//         
query = Query.query(Criteria.where("author").is("yinjihuan"));
update = Update.update("title", "MongoTemplate").set("visitCount", 10);
mongoTemplate.updateMulti(query, update, Article.class);
수정 후 결 과 는 다음 과 같 습 니 다.모든 데이터 의 title 과 visit 를 발견 할 수 있 습 니 다.count 가 수정 되 었 습 니 다.

{
    "_id": ObjectId("57c43caed4c63d7e39b5dc48"),
    "title": "MongoTemplate",
    "url": "http://cxytiandi.com/blog/detail/0",
    "author": "yinjihuan",
    "tags": [
        "java",
        "mongodb",
        "spring"
    ],
    "visit_count": 10,
    "add_time": ISODate("2016-08-29T13:46:21.881Z")
}
{
    "_id": ObjectId("57c43caed4c63d7e39b5dc49"),
    "title": "MongoTemplate",
    "url": "http://cxytiandi.com/blog/detail/1",
    "author": "yinjihuan",
    "tags": [
        "java",
        "mongodb",
        "spring"
    ],
    "visit_count": 10,
    "add_time": ISODate("2016-08-29T13:46:22.201Z")
}

//    ,  author jason   ,    author jason                
//          ,                      ,               。
query = Query.query(Criteria.where("author").is("jason"));
update = Update.update("title", "MongoTemplate").set("visitCount", 10);
mongoTemplate.upsert(query, update, Article.class);
수정 후 결 과 는 다음 과 같 습 니 다.우 리 는 새로운 데 이 터 를 발견 할 수 있 습 니 다.

{
    "_id": ObjectId("57c43caed4c63d7e39b5dc48"),
    "title": "MongoTemplate",
    "url": "http://cxytiandi.com/blog/detail/0",
    "author": "yinjihuan",
    "tags": [
        "java",
        "mongodb",
        "spring"
    ],
    "visit_count": 10,
    "add_time": ISODate("2016-08-29T13:46:21.881Z")
}
{
    "_id": ObjectId("57c43caed4c63d7e39b5dc49"),
    "title": "MongoTemplate",
    "url": "http://cxytiandi.com/blog/detail/1",
    "author": "yinjihuan",
    "tags": [
        "java",
        "mongodb",
        "spring"
    ],
    "visit_count": 10,
    "add_time": ISODate("2016-08-29T13:46:22.201Z")
}
{
    "_id": ObjectId("57c6e1601e4735b2c306cdb7"),
    "author": "jason",
    "title": "MongoTemplate",
    "visit_count": 10
}

//      ,                  , set       key          key
query = Query.query(Criteria.where("author").is("jason"));
update = Update.update("title", "MongoTemplate").set("money", 100);
mongoTemplate.updateMulti(query, update, Article.class);
수정 후 결 과 는 다음 과 같 습 니 다.우 리 는 키 를 새로 추가 한 것 을 발견 할 수 있 습 니 다.

{
    "_id": ObjectId("57c6e1601e4735b2c306cdb7"),
    "author": "jason",
    "title": "MongoTemplate",
    "visit_count": 10,
    "money":100
}

//update inc         , money         100
query = Query.query(Criteria.where("author").is("jason"));
update = Update.update("title", "MongoTemplate").inc("money", 100);
mongoTemplate.updateMulti(query, update, Article.class);
수정 후 결 과 는 다음 과 같 습 니 다.우 리 는 Money 가 200 이 되 는 것 을 발견 할 수 있 습 니 다.

{
    "_id": ObjectId("57c6e1601e4735b2c306cdb7"),
    "author": "jason",
    "title": "MongoTemplate",
    "visit_count": 10,
    "money":200
}

//update rename      key   
query = Query.query(Criteria.where("author").is("jason"));
update = Update.update("title", "MongoTemplate").rename("visitCount", "vc");
mongoTemplate.updateMulti(query, update, Article.class);

{
    "_id": ObjectId("57c6e1601e4735b2c306cdb7"),
    "author": "jason",
    "title": "MongoTemplate",
    "vc": 10,
    "money":200
}

//update unset      key
query = Query.query(Criteria.where("author").is("jason"));
update = Update.update("title", "MongoTemplate").unset("vc");
mongoTemplate.updateMulti(query, update, Article.class);
수정 후 결 과 는 다음 과 같 습 니 다.vc 라 는 key 가 삭 제 된 것 을 발견 할 수 있 습 니 다.

{
    "_id": ObjectId("57c6e1601e4735b2c306cdb7"),
    "author": "jason",
    "title": "MongoTemplate",
    "money":200
}

//update pull      tags    java
query = Query.query(Criteria.where("author").is("yinjihuan"));
update = Update.update("title", "MongoTemplate").pull("tags", "java");
mongoTemplate.updateMulti(query, update, Article.class);
수정 후 결 과 는 다음 과 같 습 니 다.tags 의 자바 가 삭 제 된 것 을 발견 할 수 있 습 니 다.

{
    "_id": ObjectId("57c43caed4c63d7e39b5dc48"),
    "title": "MongoTemplate",
    "url": "http://cxytiandi.com/blog/detail/0",
    "author": "yinjihuan",
    "tags": [
        "mongodb",
        "spring"
    ],
    "visit_count": 10,
    "add_time": ISODate("2016-08-29T13:46:21.881Z")
}
{
    "_id": ObjectId("57c43caed4c63d7e39b5dc49"),
    "title": "MongoTemplate",
    "url": "http://cxytiandi.com/blog/detail/1",
    "author": "yinjihuan",
    "tags": [
        "mongodb",
        "spring"
    ],
    "visit_count": 10,
    "add_time": ISODate("2016-08-29T13:46:22.201Z")
}
조회 조작
조회,관계 형 데이터 베이스 든 mongodb 와 같은 nosql 이 든 모두 비교적 많이 사용 되 고 대부분 작업 은 읽 는 작업 입 니 다.
mongodb 의 조회 방식 은 여러 가지 가 있 습 니 다.아래 에 자주 사용 하 는 것 만 열거 되 어 있 습 니 다.예 를 들 어:
1.=조회
2.퍼 지 조회
3.범위 이하 조회
4.in 조회
5.or 조회
6.하나 조회,전부 조회
7.스스로 천천히 공부 하기...
작성 자가 조건 에 맞 는 모든 데 이 터 를 조회 하여 List 로 돌아 갑 니 다.

Query query = Query.query(Criteria.where("author").is("yinjihuan"));
List<Article> articles = mongoTemplate.find(query, Article.class);
조건 에 맞 는 첫 번 째 데이터 만 조회 하고 Article 대상 으로 돌아 갑 니 다.

query = Query.query(Criteria.where("author").is("yinjihuan"));
Article article = mongoTemplate.findOne(query, Article.class);
집합 중의 모든 데 이 터 를 조회 하고 조건 을 추가 하지 않 습 니 다.

articles = mongoTemplate.findAll(Article.class);
조건 에 맞 는 수량 조회

query = Query.query(Criteria.where("author").is("yinjihuan"));
long count = mongoTemplate.count(query, Article.class);
홈 키 ID 조회

article = mongoTemplate.findById(new ObjectId("57c6e1601e4735b2c306cdb7"), Article.class);
검색

List<String> authors = Arrays.asList("yinjihuan", "jason");
query = Query.query(Criteria.where("author").in(authors));
articles = mongoTemplate.find(query, Article.class);
ne(!=)조회 하 다.

query = Query.query(Criteria.where("author").ne("yinjihuan"));
articles = mongoTemplate.find(query, Article.class);
lt(<)조회 방 문 량 이 10 보다 적은 글

query = Query.query(Criteria.where("visitCount").lt(10));
articles = mongoTemplate.find(query, Article.class);
범위 조회,5 이상 10 이하

query = Query.query(Criteria.where("visitCount").gt(5).lt(10));
articles = mongoTemplate.find(query, Article.class);
모호 조회,author 에 a 가 포 함 된 데이터

query = Query.query(Criteria.where("author").regex("a"));
articles = mongoTemplate.find(query, Article.class);
배열 조회,tags 의 수량 이 3 인 데 이 터 를 조회 합 니 다.

query = Query.query(Criteria.where("tags").size(3));
articles = mongoTemplate.find(query, Article.class);
or author=jason 또는 visitCount=0 의 데 이 터 를 조회 합 니 다.

query = Query.query(Criteria.where("").orOperator(
    Criteria.where("author").is("jason"),
    Criteria.where("visitCount").is(0)));
articles = mongoTemplate.find(query, Article.class);
총결산
Spring Boot 에서 Mongodb 를 어떻게 빠르게 조작 하 는 지 에 관 한 글 은 여기까지 입 니 다.더 많은 SpringBoot 작업 Mongodb 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기