MongoDB CRUD with Java Driver 

몽고디비 java 연결 및 CRUD 테스트

 

 

 

1. 다운로드 Java Driver

 

GitHub에서 최신 MongoDB Java Driver를 다운로드 받습니다.

 

https://github.com/mongodb/mongo-java-driver/downloads

 

 

2. MongoDB Connection

 

 

 MongoClient mongo = new MongoClient("localhost", 27017);

 

 DB db = mongo.getDB("test");

 boolean auth = db.authenticate("test", "test".toCharArray());

 

* MongoClient 클래스 이해

 

  • 버전 2.10.0 이전의 Java Driver에서는 MongoClient 대신에 Mongo 클래스를 사용하여야 함.
  • MongoClient는 내부적으로 connection pooling을 사용하기 때문에, 전 JVM에 걸처 하나의 인스턴스만 생성하면 됨.
  • MongoClient는 multi-thread 환경에서 안전함.
  • 여러 인스턴스를 생성한 경우, max connection과 같은 리소스에 제한을 두어야 하며, 인스턴스 사용후 MongoClient.close()를 콜하여 사용된 모든 리소스를 클린업하여야 함.
* MongoDB Replic Sets에 연결하는 경우에는 다음과 같이 멤버 리스트를 제공함으로써, primary MongoDB에 대한 auto-recovery를 제공할 수 있습니다.

 

 

 MongoClient mongo1 = new MongoClient(Arrays.asList(new ServerAddress("localhost",27017),

                              new ServerAddress("localhost", 27018),

                              new ServerAddress("localHost",27019)));

 

 

3. MongoDB Authentication

 

 

  boolean auth = db.authenticate("test", "test".toCharArray());

 

* MongoDB가 'secure mode'를 사용하는 경우에는 상기와 같이 인증 절차를 거쳐야 함.

 

  • name 및 password가 유효한 경우에서 true를 리턴함.
* 대부분의 사용자가 trusted environment에서는 인증을 사용하지 않음.

 

 

 

4. MongoDB Collection

 

사용하고자 하는 Collection을 얻기 위해서는, 다음과 같이 getCollection(String collectionName) 메소드에 컬렉션 명을 인자로 설정하면 됩니다. 컬렉션으로 우리는 데이터 저장, 업데이트와 같은 작업을 할 수 있게 됩니다.

 

참고로 Collection은 RDBMS의 테이블과 같은 의미입니다.

 

 

 DBCollection coll = db.getCollection("test");

 

 

5. MongoDB Insertion(Save)

 

다음과 같은 JSON 포맷의 데이터를 BasicDBObject 클래스를 이용하여, document를 생성한 후 Collection을 이용하여 MongoDB에 저장하면 됩니다.

예제에서는 inner(nested) document를 이용하였습니다.

 

 {

"name": "william",

  "sex" : "male",

   "createDate": "2013-07-26 23:52:11",

   "contact": {

               "mobile":"010-1111-2222",

                "fax": "02-111-3333"

          }

 }

 

 

 BasicDBObject document = new BasicDBObject("name", "MongoDB").

append("sex", "male").

append("createDate", new Date()).

append("contact", new BasicDBObject("mobile","010-1111-2222").append("fax", "02-111-3333"));

 

 coll.insert(document);

 

 

6. MongoDB findOne()

 

앞에서 저장한 document를 쿼리하기 위해서는 findOne(BasicObject obj)을 콜하면 됩니다. 예제에서는 BasicDBObject를 이용하여 name이 william이라는 쿼리를 생성하였습니다.

또는 인자가 없는 findOne() 메소드를 콜하면, 컬렉션의 첫번째 document를 리턴합니다.

 

 

 BasicDBObject findQuery = new BasicDBObject("name", "william");

 

 DBObject mydoc = coll.findOne(document);

 System.out.println("Document by findOne(): " + mydoc);

 

 

-Id element는 MongoDB에 의해 자동으로 생성되는 것으로, MongoDB 내부적으로 사용됩니다.

또한 "_"/"$" 도 MongoDB에 의해 보존된 element입니다.

MongoDB는 date type을 제공하는데, createDate 필드 값에 "$date"가 사용된 것을 확인할 수 있습니다.

 

 

 { "_id" : { "$oid" : "51f284a7abca726cfc5cb972"} , 

     "name" : "william" , 

     "sex" : "male" , 

     "createDate" : { "$date" : "2013-07-26T14:16:07.828Z"} , 

     "contact" : { "mobile" : "010-1111-2222" , "fax" : "02-111-3333"}

}

 

 

 

7. MongoDB Update

 

update(queryObject, newObject)를 사용하여 예제에서는 name을 william에서 william hong으로 변경하였습니다.

첫번째 인자는 변경할 document를 찾는 BasicDBObject를 두번재 인자에는 변경될 필드 값을 가진 BasicDBObject를 설정하면 됩니다.

 

* 주의: 특정 필드값을 변경하고자 할때는 예제에서 처럼 $set을 사용하여야합니다.

만약에 coll.update(findquery, updateObj) 대신에 coll.updaqte(findQuery, newDocument)를 사용하면, document 자체을 새 document를 대체하게 됩니다.

 

 

 BasicDBObject findQuery = new BasicDBObject("name", "william");

 

 BasicDBObject newDocument = new BasicDBObject("name", "william hong");

 

 BasicDBObject updateObj = new BasicDBObject("$set", newDocument);

 

 coll.update(findQuery, updateObj);

 

 System.out.println("Document Updated: " + coll.findOne(newDocument));

 

 

 

8. Using Cursor

 

다음은 DBCursor를 이용하여 컬렉션에 있는 모든 documents를 쿼리하는 예제입니다.

 

findOne(DBObject query)는 DBObject를 리턴하고, find(DBObject query)는 DBCursor를 리턴합니다.

 

 DBCursor cursor = coll.find();

 

 try{

while(cursor.hasNext()){

System.out.println("using cursor: " + cursor.next());

}

 }finally{

cursor.close();

 }

 

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

 

9. MongoDB remove

 

name = william인 document를 찾아 삭제하게 됩니다.

 

 

 BasicDBObject findQuery = new BasicDBObject("name", "william"); 

 coll.remove(findQuery);

 

 

 

10. 예제

 

 

 package com.hjh.mongodb;

 

import java.net.UnknownHostException;

import java.util.Arrays;

import java.util.Date;

 

import com.mongodb.BasicDBObject;

import com.mongodb.DB;

import com.mongodb.DBCollection;

import com.mongodb.DBCursor;

import com.mongodb.DBObject;

import com.mongodb.MongoClient;

import com.mongodb.ServerAddress;

 

public class HelloWorld {

 

public static void main(String[] args) throws UnknownHostException{

 

/*

 * 1. MongoDB Connection

 */

MongoClient mongo = new MongoClient("localhost", 27017);

 

/* Replica Set Connection

MongoClient mongo1 = new MongoClient(Arrays.asList(new ServerAddress("localhost",27017),

                              new ServerAddress("localhost", 27018),

                              new ServerAddress("localHost",27019)));

*/

 

DB db = mongo.getDB("test");

/*

 * 2. MongoDB Authentication

 */

boolean auth = db.authenticate("test", "test".toCharArray());

 

System.out.println("Authentication Result: " + auth);

 

/*

 * 3. MongoDB Collection

 */

DBCollection coll = db.getCollection("user");

 

 

/*

 * 4. MongoDB Insertion

 * 

 * {

 *  "name": "william",

 *  "sex" : "male",

 *  "createDate": "2013-07-26 23:52:11",

 *  "contact": {

 *  "mobile":"010-1111-2222",

 *  "fax": "02-111-3333"

 *  }

 * }

 */

BasicDBObject document = new BasicDBObject("name", "william").

append("sex", "male").

append("createDate", new Date()).

append("contact", new BasicDBObject("mobile","010-1111-2222").append("fax", "02-111-3333"));

 

coll.insert(document);

 

/*

 * 5. MongDB findOne()

 */

BasicDBObject findQuery = new BasicDBObject("name", "william");

 

DBObject mydoc = coll.findOne(findQuery);

System.out.println("Document by findOne(): " + mydoc);

 

/*

 * 6. MongoDB Update()

 */

 

BasicDBObject newDocument = new BasicDBObject("name", "william hong");

BasicDBObject updateObj = new BasicDBObject("$set", newDocument);

 

coll.update(findQuery, updateObj);

 

System.out.println("Document Updated: " + coll.findOne(newDocument));

 

 

/*

 * 7. Using Cursor

 */

DBCursor cursor = coll.find();

 

try{

while(cursor.hasNext()){

System.out.println("using cursor: " + cursor.next());

}

}finally{

cursor.close();

}

 

/*

 * 8. MongoDB remove()

 */

BasicDBObject query = new BasicDBObject("name", "william hong");

coll.remove(query);

}

 

}

 

 

11. Maven Dependency

 

 

 

 <dependencies>
 <dependency>
  <groupId>org.mongodb</groupId>
  <artifactId>mongo-java-driver</artifactId>
  <version>2.10.1</version>
 </dependency>
 
  </dependencies>

 

 

* 쿼리를 작성할때 필요한 Query Selectors에 대한 상세한 정보는 MongDB 홈페이지를 참조하세요.

 

http://docs.mongodb.org/manual/reference/operator/

 

[출처] http://blog.naver.com/willygwu2003/130173010855

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
38 Spring Batch 간단 정리 Sprong Batch 기초를 알아보자 file 졸리운_곰 2020.10.13 198
37 Spring Batch - ItemReader, ItemWriter, ItemProcessor 졸리운_곰 2020.10.13 370
36 spring batch» Spring Batch Tasklet Example file 졸리운_곰 2020.10.12 198
35 Spring Batch Example 2 - 간단한 Job만들기 file 졸리운_곰 2020.10.12 151
34 Spring batch Job 설정과 실행하기 file 졸리운_곰 2020.10.12 206
33 [Spring Batch] Configuring and Running a Job file 졸리운_곰 2020.10.12 121
32 [스프링] 스프링 배치 기본 개념 file 졸리운_곰 2019.12.24 244
31 Spring Batch 개념 정리 file 졸리운_곰 2019.12.24 257
30 스프링 배치 개발가이드 졸리운_곰 2019.12.24 321
29 Quartz + Spring Batch 조합! Quartz Scheduler 와 Spring Batch 의 궁합과 조합을 정리. file 졸리운_곰 2019.12.24 882
28 Spring Batch 간단 정리 file 졸리운_곰 2019.12.24 421
27 spring batch 소개 file 졸리운_곰 2019.12.24 208
26 Spring Batch - 소개 file 졸리운_곰 2019.12.24 207
25 Spring Batch Multithreading Example file 졸리운_곰 2019.01.31 285
24 Spring batch를 Parallel로 돌려보자 졸리운_곰 2019.01.31 399
23 Spring MVC 주요 애노테이션(Annotation)정리 file 졸리운_곰 2018.12.29 268
22 스프링/스프링부트 애노테이션(Annotation) 정리 졸리운_곰 2018.12.29 385
21 Spring Framework - annotation 정리 #1 졸리운_곰 2018.12.29 321
20 [Spring] Annotation 정리 졸리운_곰 2018.12.29 272
19 Maven 기초 사용법 졸리운_곰 2018.04.15 322
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED