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

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
62 [maven 설정] Jackson Databind » 2.6.7.1 졸리운_곰 2020.10.05 187
61 [maven 설정] MongoDB Java Driver » 3.12.6 졸리운_곰 2020.10.05 175
60 Maven 에 직접 jar 라이브러리 추가하기!!! ( 외부 repository 사용이 안될때) + scope 정리 졸리운_곰 2020.10.05 169
59 추상(abstract) 클래스가 필요한 기본적인 이유 졸리운_곰 2019.10.30 247
58 Java and JMX - Building Manageable Systems secret 졸리운_곰 2019.05.26 0
57 [GC] 강제로 GC시키기Java 메모리 full 발생시 강제로 GC 시키기 졸리운_곰 2019.01.22 377
56 Java Map 반복(Iteration)시키는 3가지 방법 졸리운_곰 2019.01.01 347
55 UML: 클래스 다이어그램과 소스코드 매핑 file 졸리운_곰 2018.04.30 381
54 lombok에 대해서 알아보자 file 졸리운_곰 2018.04.24 292
53 lombok을 잘 써보자! (2) 졸리운_곰 2018.04.24 318
52 lombok을 잘 써보자! (1) 졸리운_곰 2018.04.24 366
51 [Java] Quartz (쿼츠)를 사용하여 자바 스케줄링(scheduling) 하기 졸리운_곰 2018.02.12 509
50 [subclipse] svn에서 무시할 파일 설정하기 svn:ignore property 설정 file 졸리운_곰 2017.09.24 286
49 자바에서 C# 호출하기 file 졸리운_곰 2017.04.26 474
48 Comparison between C# and Java - DiVA.pdf file 졸리운_곰 2017.04.25 1017
47 Java Annotation: 인터페이스 강요로부터 자유를… file 졸리운_곰 2017.03.20 302
46 Java Naming conventions 자바 명명 규칙 졸리운_곰 2017.03.04 272
45 Timer 클래스를 이용한 작업 스케쥴링 졸리운_곰 2016.11.14 290
44 자바 8 살펴보기 file 졸리운_곰 2016.05.23 432
43 Java 8 개선 사항 관련 글 모음 졸리운_곰 2016.05.23 409
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED