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 org.bson.Document; import com.mongodb.client.MongoClient; public class MongoMain { public static void main(String[] args) { } } |
![]() |
5.
// 3. 데이터 삽입 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); |
![]() |