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

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
35 [EMF] EMF Tutorial EMF 튜터리얼 file 졸리운_곰 2023.08.23 283
34 Eclipse RAP Tutorial for Beginners - Workbench Application (OLD) file 졸리운_곰 2021.01.30 323
33 Learn Eclipse GMF in 15 minutes file 졸리운_곰 2019.11.27 253
32 [Eclipse] GEF entry series (10, an implementation of the form) file 졸리운_곰 2019.11.25 212
31 GEF Programmer Guide 번역 졸리운_곰 2019.11.25 227
30 Learn Eclipse GMF in 15 minutes file 졸리운_곰 2019.11.20 224
29 RCP 에디터 정리 졸리운_곰 2019.11.20 333
28 다른 그림과 관련하여 GEF 편집기 레이아웃에서 그림의 위치 제한 조건을 동적으로 계산 Dynamically calculating the position constraints for a figure in a GEF editor layout in relation to another figure file 졸리운_곰 2019.11.20 277
27 RCP 등에서 .mf 파일로 다른 프로젝트 익스포트 포함시 라이브러리(메소드)를 찾지 못할 때, Eclipse RCP - cant resolve importing libraries in final build file 졸리운_곰 2019.10.15 410
26 ESE2006-EclipseModelingSymposium15_GMF.pdf file 졸리운_곰 2019.09.21 302
25 GMF_Creation_Review.pdf file 졸리운_곰 2019.09.21 366
24 Eclipse EMF and GMF Tutorial file 졸리운_곰 2019.09.21 222
23 GMF Tutorial/ko file 졸리운_곰 2019.09.20 347
22 Model Driven Architecture approach to domain of graphical editors file 졸리운_곰 2019.09.20 268
21 Single_Sourcing_RAP_RCP_en.pdf file 졸리운_곰 2019.05.15 311
20 Rich client platform 설명 및 배우기 참고 졸리운_곰 2019.05.15 309
19 Rich Ajax Platform, Part 1: 소개 file 졸리운_곰 2019.05.15 320
18 또 하나의 크로스 플랫폼: Eclipse RAP file 졸리운_곰 2019.05.15 319
17 Eclipse 4 RCP 튜토리얼(완료) file 졸리운_곰 2019.05.14 977
16 Updating UI in Eclipse RCP 졸리운_곰 2015.11.07 408
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED