0%

MongoDB

RDBMS vs NoSQL

RDBMS NoSQL(Not Only SQL)
Database Database
Table Collection
Row / Record Document
Column Key / Filed

컬렉션 생성

1
2
3
4
5
6
7
8
9
10
use dss
db.createCollection("user")


db.createCollection("user2",
{autoIndexId:true, capped:true, size:50, max:5}
)

// 지우기
db.user.drop()

크기가 500바이트, document 최대 5개 까지만 생성합니다. 5개가 되기전에 용량이 50바이트를 넘기면, 제일 과거의 데이터를 삭제하면서 들어갑니다.

Insert

데이터를 넣어 보겠습니다.

1
2
3
db.user1.insert({"subject":"python","level":3})
db.user1.insert({"subject":"web","level":2})
db.user1.insert({"subject":"sql","level":1})

여러개를 Insert 해보겠습니다. SQL 처럼 collection 생성하고 넣을 필요 없이. 이름 정해서 데이터 바로 넣으면 그냥 생성됩니다.

1
2
3
4
5
6
7
8
db.user.insert([
{"subject":"python","level":3},
{"subject":"web","level":2},
{"subject":"sql","level":1},
{"subject":"python","level":3},
{"subject":"web","level":2},
{"subject":"sql","level":1},
])

위에서 설정한 것과 같은 제약조건이 있으면 remove 함수는 쓸수 없습니다. 지우려면 전체를 다 지워야 합니다.

1
2
3
db.user1.remove({level:2})

// error ; cannot remove from a capped collection: dss.user1

FIND (필터링)

find(query, projection) query : SQL의 where 절 projection : SQL의 select, 보여지는 filed

1
db.info.find({"subject":"python"})

lte : 작거나 같다

1
db.info.find({"level":  {$lte:2}})

in : 선택

1
db.info.find({"subject": {$in: ["java","python"]}})

논리연산자 : $or, $and, $not, $nor

1
2
db.info.find({$and : [{"subject":"python"},{"level":{$gte:3}}]})
db.info.find({$nor : [{"subject":"python"},{"level":{$gte:3}}]})

자바스크립트 문법을 그대로 사용 가능합니다.

1
db.info.find({$where:"this.level == 1"})

projection : mysql에서 select 할때 column 지정하는 것과 같습니다.

1
2
3
db.info.find({},{"_id":false,"level":false})
db.info.find({},{"subject":true,"level":true})
db.info.find({},{"subject":true,"level":true,"_id":false})

sort : 1(오름차순),-1(내림차순)

1
2
3
db.info.find().sort({"level":1})
db.info.find().sort({"level":-1})
db.info.find().sort({"level":-1,"subject":1})

limit & skip : limit는 아래로 n개를 선택합니다. skip은 n개 뛰어넘고 그 다음 부터 시작합니다.

1
2
3
4
5
-- limit
db.info.find().limit(3)
db.info.find().sort({"level":1}).limit(3)
-- skip
db.info.find().skip(2).limit(3)

UPDATE

1
2
3
4
db.info.update(
{"subject":"html"},//query
{"subject":"sass","level":2}//수정할내용
)

upsert : 데이터가 있으면 update, 없으면 insert를 합니다. 기본적으로 1개만 업데이트. multi:true 해줘야 여러개 데이터를 업데이트 합니다.

1
2
3
4
5
6
db.info.update(
{"subject":"less"},
{"subject":"less","level":2},
{"upsert":true}
// subject에 less가 없는데 upsert: true이므로 {"subject":"less","level":2}로 데이터 입력했음
)

$set, $unset

특정 데이터를 수정합니다.

1
2
3
4
5
db.info.update(
{"level":2},
{"$set":{"level":1}},
{multi:true}
)

function

자바스크립트로 함수를 사용할수 있습니다.

1
2
3
4
5
var showSkip = function(start){
return db.info.find().skip(start-1)
}

showSkip(2)