Skip to content

2. Create Database / Collection / Document

HeadImg

Reference: MongoDB

이번 시간에는 데이터베이스, 컬렉션, 도큐먼트를 생성하는 방법을 알아본다.

Create and Switch Database

현재 데이터베이스 표시

test> db
test

데이터베이스 사용, 만약에 없으면 첫 레코드가 삽입될 때 데이터베이스가 생성된다.

test> use visiting
'switched to db visiting'
visiting>

Drop Database

우선 데이터베이스를 선택하고 삭제해야 한다.

test> use visiting
visiting> db.dropDatabase();
{ ok: 1, dropped: 'visiting' }

Create Collection

Collection1을 명시적으로 생성하려면 다음과 같이 한다.

> db.createCollection('test1')

도큐먼트를 입력함으로써 명시적으로 만들지 않아도 자동으로 생성된다.

> db.test2.insertOne({ x: 1 })

현재 collections 보기

> show collections

Drop Collection

> db.test1.drop()

Insert Document

하나 혹은 여러 개의 도큐먼트 삽입할 수 있다.

> db.visit.insert({"name": "A", "visit": ["Paris", "London"], "age": 33})
> db.visit.insert([  # 
    {"name": "B", "visit": ["London"], "age": 56},
    {"name": "C", "visit": ["Seoul", "London"], "age": 45}
])

Filter Document

find 메소드를 사용하여 특정 조건으로 필터링 할 수 있다.

> db.visit.find()  # 
> db.visit.find( {"name": "A"} )
> db.visit.find( {"age": { $gt: 40 } } )
> db.visit.find( {"visit": { $in: ["Seoul", "Paris"] } } )

두번째 인자에 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} )  #     

projection에 여러 연산자를 사용하여 조회를 수행할 수 있다. 예를 들어, $slice 연산자를 사용하여 배열의 첫번째 데이터만 조회할 수 있다.

> db.visit.find( {"name": "A"}, {"_id": 0, "visit": {$slice: 1} } )

Remove Document

remove 메소드를 사용하여 특정 조건을 포함한 데이터 제거

> db.visit.remove( {"name": "A"} )

Aggregate Pipeline

여러 도큐먼트에서 그룹 값을 뽑아내려고 하는 작업을 집계(aggregation)라고 하며, MongoDB에서는 aggregation pipeline2이 집계 작업을 수행한다.

예제1. 각 사람이 방문한 도시의 개수를 세어보고, 개수가 많은 순서대로 정렬해보기

> db.visit.aggregate([
    {  # Pipeline 1: 
        $project: {
            _id: "$name",
            countVisit: { $size: "$visit" }
        }
    },
    {  # Pipeline 2: 
        $sort: { countVisit: -1 }
    }
])

예제2. 도시별로 방문했던 사람의 나이를 합산하기

> db.visit.aggregate([
    {  # Pipeline 1: 
        $unwind: "$visit"
    },
    {  # Pipeline 2: 
        $group: {
            _id: "$visit",
            totalAge: { $sum: "$age" }
        }
    }
])
Was this page helpful?

Comments