2. Create Database / Collection / Document
이번 시간에는 데이터베이스, 컬렉션, 도큐먼트를 생성하는 방법을 알아본다.
Create and Switch Database¶
현재 데이터베이스 표시
데이터베이스 사용, 만약에 없으면 첫 레코드가 삽입될 때 데이터베이스가 생성된다.
Drop Database¶
우선 데이터베이스를 선택하고 삭제해야 한다.
Create Collection¶
Collection1을 명시적으로 생성하려면 다음과 같이 한다.
도큐먼트를 입력함으로써 명시적으로 만들지 않아도 자동으로 생성된다.
현재 collections 보기
Drop Collection¶
Insert Document¶
하나 혹은 여러 개의 도큐먼트 삽입할 수 있다.
> db.visit.insert({"name": "A", "visit": ["Paris", "London"], "age": 33})
> db.visit.insert([ # (1)
{"name": "B", "visit": ["London"], "age": 56},
{"name": "C", "visit": ["Seoul", "London"], "age": 45}
])
-
Shift
+Enter
로 line break 가능.
Filter Document¶
find
메소드를 사용하여 특정 조건으로 필터링 할 수 있다.
> db.visit.find() # (1)
> db.visit.find( {"name": "A"} )
> db.visit.find( {"age": { $gt: 40 } } )
> db.visit.find( {"visit": { $in: ["Seoul", "Paris"] } } )
- 전체 데이터 조회,
db.visit.find({})
와 같다..pretty()
를 붙이면 이쁘게 출력한다.
두번째 인자에 projection 을 추가하여 특정 필요한 필드만 반환 할 수 있다. 0
을 주면 해당 필드를 제외하고, 1
을 주면 해당 필드만 반환한다. _id
필드만 제외하고, 포함과 제외를 동시에 혼용할 수 없다. 예를 들어, "A"
라는 사람의 레코드를 조회할 때 visit
필드만 반환하고 싶다면, visit
필드만 1
로 두던지, 아니면 다른 두 필드(name
, age
)를 0
으로 두는 것이다.
> db.visit.find( {"name": "A"}, {"_id": 0, "visit": 1} )
> db.visit.find( {"name": "A"}, {"_id": 0, "name": 0, "age": 0} ) # (1)
-
_id
필드만 혼용이 가능하다. 예,db.visit.find( {"name": "A"}, {"_id": 1, "name": 0, "age": 0} )
projection에 여러 연산자를 사용하여 조회를 수행할 수 있다. 예를 들어, $slice 연산자를 사용하여 배열의 첫번째 데이터만 조회할 수 있다.
Remove Document¶
remove
메소드를 사용하여 특정 조건을 포함한 데이터 제거
Aggregate Pipeline¶
여러 도큐먼트에서 그룹 값을 뽑아내려고 하는 작업을 집계(aggregation)라고 하며, MongoDB에서는 aggregation pipeline2이 집계 작업을 수행한다.
예제1. 각 사람이 방문한 도시의 개수를 세어보고, 개수가 많은 순서대로 정렬해보기
> db.visit.aggregate([
{ # Pipeline 1: (1)
$project: {
_id: "$name",
countVisit: { $size: "$visit" }
}
},
{ # Pipeline 2: (2)
$sort: { countVisit: -1 }
}
])
-
_id
는name
필드를 따르고,countVisit
는visit
필드의 길이를 구한다. -
countVisit
필드를 기준으로 내림차순 정렬한다.
예제2. 도시별로 방문했던 사람의 나이를 합산하기
> db.visit.aggregate([
{ # Pipeline 1: (1)
$unwind: "$visit"
},
{ # Pipeline 2: (2)
$group: {
_id: "$visit",
totalAge: { $sum: "$age" }
}
}
])
-
visit
필드를 배열로 간주하고, 각 배열의 요소를 도큐먼트로 만든다. -
visit
필드를 기준으로 그룹을 만들고,totalAge
필드에age
필드의 값을 더한다.