본문 바로가기

카테고리 없음

31일차 공부 NoSQL, MongoDB

1 교시

 

NoSQL

필기

 

 

 

 

2 교시

 

Mongo DB 설치

걍 Next 만 쭉 눌르고 설치

 

** path 환경변수

=> 명령어를 입력했을 때 명령어를 찾는 위치

C:\Program Files\MongoDB\Server\4.2\bin

 

 

 

 

 

** MongoDB

=> NoSQL

1. Mongo DB Server 실행명령 : 터미널에서 입력

mongod --dbpath 데이터가 저장된 경로

 

※ 명령프롬프트에서 붙여넣기 : CTRL + 우클릭

 

2. Mongo DB Client 실행 명령 : 새로운 터미널에서 입력

mongo

mongo --host IP 또는 도메인 -- 포트번호

 

3. 데이터베이스 생성 및 사용 명령

> use 데이터베이스이름

 

=> 존재하는 데이터베이스가 있으면 그 데이터베이스를 사용하고 없으면 생성하고 사용 

 

=> 데이터베이스 확인 : show dbs

=> 데이터베이스 삭제 : db.dropDatabase( )

 

4. collection

=> 테이블과 비슷한 개념으로 데이터의 집합

1) 생성

db.createCollection("컬렉션이름")

=> 컬렉션을 만들지 않고 데이터를 삽입하면 자동으로 컬렉션이 생성된다.

 

2) 컬렉션 조회

db.getCollectionNames()

 

3) 컬렉션 제거

db.컬렉션이름.drop()

 

4) MongoDB에서 컬렉션 문제

=> MongoDB는 근본적으로 join을 지원하지 않기 때문에 하나의 컬렉션에 모든 데이터를 저장하기를 권장하지만 하나의 collection이 커지면 데이터를 조회할 때 오퍼레이션이 많이 필요하게 되서 메모리의 개시 효율이 떨어지게 되기 대문에 현업에서는 데이터를 나누어서 저장하기를 권장한다.

 

5) 컬렉션에 데이터 삽입

db.컬렉션이름.insert(데이터)

=> 데이터를 삽입하면 삽입한 결과가 문자열로 출력

 

=> 데이터 확인

db.컬렉션이름.find()

 

실습

db.users.insert({"id":"root", "password":"1234"})

 

db.users.find()

=> 데이터를 삽입할 때 작성하지 않은 Objectid가 _id라는 키로 삽입되어 있는데 인덱싱을 위해서 MongoDB가 삽입한 키이다.

 

 

실습 - 배열 삽입

db.users.insert([{"id":"users01", "password":"1234"}, {"id":"user02", "password":"5678"}])

 

=> 특정 key의 중복을 제거하도록 인덱스를 설정

db.컬렉션.createIndex({키이름1}, {unique:true})

 

 

6. 데이터 수정

db.컬렉션이름.update({조건}, {수정할내용})

=> 수정할 내용만 작성하면 기존 내용이 모두 삭제되고 수정

 

db.컬렉션이름.update({조건}, {$set:{수정할내용}})

=> 수정할 내용에 있는 부분만 수정

 

db.컬렉션이름.update({조건}, {수정할내용}, {upsert:true})

=> 조건에 맞는 데이터가 없으면 추가

 

=> update 대신에 updateMany를 호출하면 조건에 맞는 데이터 전부 수정

update는 데이터1개만 수정

 

db.users.insert({id:"root", password:"1234"})
WriteResult({ "nInserted" : 1 })

db.users.update({id:"root"}, {password:"5678"})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

 

db.users.update({id:"root"}, {%set:{password:"5678"}})

 

7. 데이터 삭제

=> db.컬렉션이름.remove({조건})

=> db.컬렉션이름.deleteOne({조건})

=> db.컬렉션이름.deleteMany({조건})

 

8. 데이터 조회

db.컬렉션이름.find(조건, 조회할컬럼)

=> 모두 생략하면 컬렉션의 모든 데이터가 조회

 

=> 조건을 설정하면 조건에 맞는 데이터만 조회

 

=> 조회할 컬럼을 입력할 대는 

{컬럼이름:0또는1, 컬럼이름:0또는1..}

0이면 제외되고 1이면 포함

 

=> find 뒤에 사용할 수 있는 함수

limit(개수) : 개수만큼 가져오기

skip(개수) : 개수만큼 건더뛰기

sort({컬럼이름 : -1 또는1, 컬럼이름 : -1 또는 1...})

1이면 오름차순이고 -1이면 내림차순

 

=> users 컬렉션의 전체 데이터 조회

db.users.find()

 

=> users 컬렉션에서 id가 root 인 항목만 조회

db.users.find({id:"root"})

 

=> users 컬렉션에서 id만 조회

db.users.find({}, {id:1})

 

=> 테이블에서 데이터 2개 가져오기

db.users.find().limit(2)

 

=> 테이블에서 1개 건너뛰고 가져오기

db.users.find().skip(1).sort({id:-1})

 

 

** MongoDB 와 Java 연동

1. 드라이버 파일을 프로젝트에서 사용할 수 있도록 설정

=> Java Application에서는 프로젝트 내에 드라이버 파일을 복사하고 build path에 추가

=> mongodb-driver, mongodb-driver-core, bson 파일 3개

 

2. MongoDB 데이터베이스 연결 및 데이터베이스 가져오기 및 컬렉션 연결

MongoClient 접속객체 = MongoClients.create("mongodb://아이피:포트번호");

MongoDatabase 데이터베이스이름 = 접속객체.getDatabase("데이터베이스이름");

MongoCollection<Document>컬렉션이름 = 데이터베이스.getCollection("컬렉션이름");

 

데이터베이스이름 : mymongo

컬렉션이름 : users

접속객체 : mongoClient

 

3. 전체 데이터 가져오기

MongoCursor<Document> 컬렉션.find().iterator();  //찾아온 데이터들의 Cursor가 리턴

=> 커서의 메소드 중에서 hasNext()를 호출하면 다음 데이터의 존재여부를 리턴하고 next()를 다음 데이터(Document 타입)를 리턴

=> Document 타입의 사용법은 Map과 동일

저장할 때 사용한 Key를 key로 저장하고 있다.

package javaapp0521;

import java.util.ArrayList;
import java.util.List;

import org.bson.Document;

import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;

public class MongoMain {

     public static void main(String[] args) {
          MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");
          MongoDatabase mymongo = mongoClient.getDatabase("mymongo"); 
          // 전체 데이터를 커서로 리턴해주는 메소드를 수행    

          // 커서 : 데이터의 모임을 순서대로 순회할 수 있도록 해주는 포인터
          // iterator, enumerator, cursor, 빠른 열거(for-each) 가 유사
     
     
MongoCollection<Document>users = mymongo.getCollection("users");
          // System.out.println(users);

          // 1. 전체 데이터 가져오기
         // 전체 데이터를 저장할 List를 생성
         List<Document> list = new ArrayList();

         // 전체 데이터를 커서로 리턴해주는 메소드를 수행
         MongoCursor<Document> cursor = users.find().iterator();
          // 데이터를 순회하면서 list에 하나씩 추가
          while(cursor.hasNext()) {
               list.add(cursor.next());
         }
          // 전부 사용했으므로 사용 종료
          cursor.close();

          // 데이터 출력
         for(Document document : list) {
               System.out.println(document.get("id") + ":" + document.getInteger("password"));
         }

     }

}

 

5.

// 3. 데이터 삽입
// 삽입할 데이터 생성
Document document = new Document();
document.put("id", "ggangpae1");
document.put("password", "cyberadam");

users.insertOne(document);

 

 

6. 데이터 삭제

=> Document 객체를 만들어서 deleteOne 메소드를 호출하고 Document를 매개변수로 대입

Document document = new Document();
document.put("id", "ggangpae1");

users.deleteOne(document);

 

 

7. 데이터 수정

=> update 메소드는 Document 객체를 2개 만들고 update 메소드에 대입해야 한다.

=> 첫번째 Document는 수정할 데이터의 조건이고 두번째 Document는 수정할 내용이다.

 

=> id가 user01인 데이터의 password를 1111로 변경

// 조건에 해당하는 Document 생성
Document where = new Document();
where.put("id", "user01");

Document set = new Document();
set.put("$set", new Document("password", "1111");

users.updateOne(where, set);