설치 간 this may take a few minutes에서 진행이 안될경우 Compass설치를 해제 하고 다시 설치를 하자(재부팅 필요)
경로를 d드라이브로 잡더라도 실제 설치파일은 c드라이브에 설치된다. 하지만 데이터 저장소는 d드라이브에 생성
2. 실행파일 별 분류
mongo.exe : mongoDB를 조작할 수 있는 MongoDB shell 프로그램
3. 데이터 구조
Database : Collection의 물리적 컨테이너
Collection : RDBMS에서의 table이라고 생각하면 된다. Document의 그룹, Document의 내부에 위치해 있음, RDBMS와 달리 스키마를 따로 갖고 있지 않음(동적스키마로 생성)
Document : nosql을 다른말로 Document Oriented Database라 함, 한개 이상의 key-value 쌍으로 이루어진 구조, 일반 rdbms에서는 row or tuple과 유사하다 생각하면 된다.
Key/Field : 일반 Rdbms에서 Column이라 생각하면 된다. 컬럼 명과 저장 값으로 생각하면 쉽다.
4. 기본명령어+CRUD
show dbs : 데이터베이스 리스트가 출력
db : 현재 사용하고 있는 데이터베이스 출력
db.stats() : 현재 사용 하고 있는 데이터 베이스 출력
use database : 데이터베이스 스위치 혹은 생성(존재 하지 않을 경우 생성)
db.dropDatabase() : 데이터베이스를 삭제
db.createCollection(“book”,{capped:true, size:6142800, max:10000}) - capped : boolean타입, true로 설정 시 활성화, capped collection이란 고정된 크기(fixed size)를 가진 컬렉션, 사이즈가 초과시 가장 오래된 데이터를 덮어씀 - size : capped가 true일 경우 필수로 설정 해야되는 값이며, 해당 컬렉션의 최대사이즈(단위:byte) - max : 해당 컬렉션에 추가 할 수 있는 최대 document 갯수
db.book.insert({“name”:”abc”}) , single - key/field 값을 입력 할 있다. 만약 collection이 생성 되지 않았을 경우 자동으로 생성된다. - multi로 저장하기 위해서는 db.book.insert([{“name”:”abc”},{“name”:”def”}]) 와 같이 대괄호를 묶어줘야된다. - 여러 행 저장은 []을 이용한다.
db.book.drop() - test데이터베이스의 book이라는 collection을 제거 - 제거전에는 필수로 use database를 이용하여 현재 데이터베이스를 설정 해야된다.
db.books.find() - Document 리스트를 확인
db.book.remove({“name”:”def”}) - Document 리스트 삭제
5. search
mock data 생성 - db.book.insert({“name”:”A”,”hits”:100,”auther”:[{“name”:”park”},{“name”:”lee”}]}); - db.book.insert({“name”:”B”,”hits”:50,”auther”:[{“name”:”kim”}]}); - db.book.insert({“name”:”C”,”hits”:30,”auther”:[{“name”:”kim”},{“name”:”choi”}]});
db.book.find({“hits”:{$gte:50}}).pretty(); - hits가 50 이상인 document를 조회한다. -$gte는 greater than or equals(~보다 크거나 같거나), $lte는 less than or equals(~보다 작거나 같거나)
db.book.find({“name”:{$in:[“A”,”B”]}}).pretty(); - name이 A, B인 Document
db.book.find({$or:[{“name”:”A”},{“hits”:50}]}).pretty() - name이 A 혹은 hits가 50인 Document
db.book.find({$and:[{“hits”:{$lte:50}}, {“name”:”B”}] }).pretty() - hits가 50 이하 and name이 B인 Document
db.book.find({“name”:{$regex:/a|b/,$options:”i”}}).pretty() db.book.find({“name”:/a|b/i}).pretty() - a또는 b 를 정규식으로 검색 option: i는 대소문자 무시
db.book.find({$where: “this.name == ‘A’”}).pretty() - $where을 이용하면 자바스크립트 표현식(expression)을 사용할 수 있다.
db.book.find({$and:[{$where:”this.auther.length == 2”}, {“name”:”c”}]}).pretty() - auther의 Field가 2개 이며 name이 c인 Document를 검색
db.book.find({“auther”:{$elemMatch:{“name”:”park”}}}).pretty(); - embedded Document란 auther Field처림 Document 안 배열 형태로 있는 Document 를 말합니다. $elemMatch는 이러한 것들을 검색 할 때 이용합니다.
db.book.insert({“name”:”D”,”hits”:200,”auther”:[],”language”:[“eng”,”kor”,”jpn”],”seller”:{“name”:”saramin”}}) - Embedded Document배열이 아닌경우 접근을 해보기 위해 mock 데이터 추가
db.book.find({“language”:”eng”}).pretty() - Embedded Document가 아니고 배열일 경우 바로 접근하면 된다.
db.book.find(“seller.name”:”saramin”).pretty() - Embedded Document가 아니고 Key/Field일 경우도 .형태로 접근 가능
db.book.find({},{“_id”:false,”name”:true,”hits”:true}); - 2번째 인자값은 option으로 보여질 Field에 대한 결정을 함
db.book.find({$and:[{“name”:”A”}]},{“auther”:{$slice:1}}).pretty() -$slice를 하면 해당 갯수만큼의 Document만큼만 갖고온다.