5. MongoDB
Data Modification
• Data modification은 create, update, delete의 operation을 이용함
• users collection에 document의 추가예
http://docs.mongodb.org/
6. MongoDB
BSON
• BSON(Binary JSON)은 JSON의 Binary 표현
• JSON은 파워풀하지만, binary 데이터로 저장할 수 없음
– MongoDB는 BSON을 이용하여 데이터를 저장함
– 예 : {"hello": "world"}
x16x00x00x00x02hellox00x06x00x00x00worldx00x00
7. MongoDB
Read Lock과 Write Lock
• DB별 Read Lock과 Write Lock을 가짐
• read Lock은 여러 Operation에서 공유가 가능한 반면, write olock은
하나의 Operation에서 사용가능
• 우선권
– write lock이 read lock보다 우선권을 갖는 이유로, write 작업이 많을때
DB Read작업을 할 수 없게 됨
8. MongoDB
몽고DB 실행
• 서버실행 : mongod --dbpath d:mongo
• 몽고DB쉘 : mongo
– 데이터 조작을 위한 몽고쉘(자바스크립트 쉘)을 제공한다.
9. MongoDB
몽고DB의 내부적인 특징
• 컬렉션은 스키마가 없는 테이블로 생각할 수 있다.
– 데이터의 기본 단위는 문서이며, 컬렉션은 문서의 모음이다.
• 모든 문서는 문서컬렉션 내에 유일키를 가진다
• 데이터형과 대소문자를 구분한다
– {“foo”:3}와 {“foo”:”3”}는 다르다
• 컬렉션 이름제약
– 몽고DB에서 정의한 함수명은 컬렉션이름이 될 수 없음
– ex : db.version
10. MongoDB
MongoDB 쉘의 기본명령어
• use [databasename]
– 데이터베이스 선택
• db
– 현재 선택된DB이름(변수) 확인
• show dbs
– show database names
• show collections
– show collections in current database
• db.[collection-name].drop()
– collection 삭제
• show users
– show users in current database
• show profile
11. MongoDB
MongoDB 쉘과 자바스크립트
• 자바스크립트의 for 루프 사용
• 함수호출
var collections=[“my”,”name”,”is”,”wook”];
for (i in collections){
doStuff(db.blog[collections[i]]);
}
function factorial (n) {
if (n <= 1) return 1;
return n * factorial(n - 1);
}
factorial(5);
17. MongoDB
주요 Operator
• push
– array에 특정 값을 append함
• The $push operator appends a specified value to an array.
– Element 마지막에 item추가
– db.blog.update({}, {"$push" : {"x" : 1}})
• 마지막 요소부터 마지막 item에 추가
– db.blog.update({"score":1}, {"$push" : {"x" : 3}})
• 조건을 주어서 추가
db.blog.insert({"key1":"value1"})
db.blog.update({"key1":"value1"},{$push : {"key2":"value2"}})
http://docs.mongodb.org/manual/reference/operator/update/push/
append됨
23. MongoDB
조건절
blog = db.analytics.findOne({url : "/blog"})
if (blog) {
blog.pageviews++;
db.analytics.save(blog);
}else {
db.analytics.save({url : "/blog", pageviews : 1})
}
else의 여는 괄호가 바로 오도록 주의
upsert가 없는 경우
db.analytics.update({"url" : "/blog"}, {"$inc" : {"pageviews" : 1}}, true)
upsert가 있는 경우
해당숫자만큼 증가
(문서가 없으면 새로 할당)
• Upserts
– update의 특별한 타입. 문서가 없을때 생성, 있으면 업데이트
25. MongoDB
데이터형
• 불리언형 : {“x”:true}
• 부동소수점형 : {“x”:3.14},{“x”:3}
• 문자열형 : {“x”:”wook”}
• 날짜형 : {“x”:new Date()}
• Undefined 형 : {“x” : undefined}
• 배열 : {“x”:[“a”,”b”,”c”]}
• 내장문서 : {“x” : {“daegu”,”daejeon”}}
• 문서 “X”의 값으로, 내장문서를 가질 수 있음
• 객체 ID형 : {“x” : objectId()}
– 객체 ID형 문서의 고유한 12바이트 ID
• ....
26. MongoDB
ObjectIds
• ObjectID
– _id의 기본 데이터형
– 전통적인 auto increment 방식의 primary 키의 대체방식으로, 다중서버에서 고
유 값을 가질수 있도록 ObjectID가 생성됨
– 키구성
• Time : unix timestamp
• Machine : md5 hash of machine name
• Process id : pid
• Counter : incrementing value starting with a random number