본문 바로가기
Database | 데이터베이스/NoSQL

NoSQL 정리 - 구조 , 연결

by 자유코딩 2018. 10. 11.

구조는 이렇다.


Server 에 접속하면 DB가 있다.


DB 에는 Collection 이 들어있다.


Document 는 하나의 테이블이라고 생각하면 된다.


테이블들이 여러개 묶여 있으면 그것은 Collection 이 된다.



DB 생성부터 하나씩 해보자.


터미널을 켰다.



mongo를 입력하면 MongoDB 가 실행된다.


실행된 Mongo DB에서 Select , Insert , Update , Delete 를 차례대로 해본다.


Insert


아래 코드를 그대로 터미널에 복사해서 붙여넣으면 된다.


insert 가 수행된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
db.nettuts.insert({
    first: 'matthew',
    last: 'setter',
    dob: '21/04/1978',
    gender: 'm',
    hair_colour: 'brown',
    occupation: 'developer',
    nationality: 'australian'
});
        db.nettuts.insert({
    first: 'james',
    last: 'caan',
    dob: '26/03/1940',
    gender: 'm',
    hair_colour: 'brown',
    occupation: 'actor',
    nationality: 'american'
});
db.nettuts.insert({
    first: 'arnold',
    last: 'schwarzenegger',
    dob: '03/06/1925',
    gender: 'm',
    hair_colour: 'brown',
    occupation: 'actor',
    nationality: 'american'
});
db.nettuts.insert({
    first: 'tony',
    last: 'curtis',
    dob: '21/04/1978',
    gender: 'm',
    hair_colour: 'brown',
    occupation: 'developer',
    nationality: 'american'
});
db.nettuts.insert({
    first: 'jamie lee',
    last: 'curtis',
    dob: '22/11/1958',
    gender: 'f',
    hair_colour: 'brown',
    occupation: 'actor',
    nationality: 'american'
});
db.nettuts.insert({
    first: 'michael',
    last: 'caine',
    dob: '14/03/1933',
    gender: 'm',
    hair_colour: 'brown',
    occupation: 'actor',
    nationality: 'english'
});
db.nettuts.insert({
    first: 'judi',
    last: 'dench',
    dob: '09/12/1934',
    gender: 'f',
    hair_colour: 'white',
    occupation: 'actress',
    nationality: 'english'
});
cs


아직 create database aaaa 와 같은 명령어는 쓰지 않았다.


그런데 DB도 생성되고 , 데이터도 insert 된다.


이렇게 코드를 입력하면 데이터가 들어간다. 여기서 nettuts 는 테이블 이름이다.


이번에는 select 를 해본다.


select


1
db.nettuts.find()
cs



이렇게 하면 데이터가 출력된다.


find 에는 여러가지 옵션을 사용할 수 있다.


db.nettuts.find({gender: 'm', $or: [{nationality: 'english'}]});


$or 옵션을 사용하면  앞쪽 조건을 만족하면서 , nationality 가 english 인 것을 찾는다.


$and 옵션의 결과는 and 게이트를 생각하면 된다.


아래 쿼리를 한번 보자.


 db.nettuts.find({gender: 'm', $or: [{nationality: 'english'}, {nationality: 'american'}]}).sort({nationality: -1});


이 쿼리는 gender 가 m이면서 , nationality 가 english 또는 american 인 것을 nationality 기준으로 내림차순 정렬한다.


db.nettuts.find({gender: 'm', $or: [{nationality: 'english'}, {nationality: 'american'}]}).sort({nationality: +1});


반대로 sort 뒤에 있는 부분을 +1로 바꾸면 오름차순이 된다.


nationality 는 내림차순으로 , first 는 오름차순으로 할 수도 있다.


아래 코드처럼 입력하면 된다.


db.nettuts.find({gender: 'm', $or: [{nationality: 'english'}, {nationality: 'american'}]}).sort({nationality: -1, first:1});



쿼리 결과에 limit 을 걸어야 할 때도 있다.


주로 페이징 처리를 할 때 그렇다.


아래 쿼리처럼 작성하면 된다.


db.nettuts.find({gender: 'm', $or: [{nationality: 'english'}, {nationality: 'american'}]}).limit(2);


맨 뒤에 limit() 만 붙여주면 알아서 위에서부터 2개를 가져온다.


만약 앞쪽 데이터를 2개를 생략하고 뒤에 있는 데이터 2개를 가져오려면 어떻게 해야 할까


그럴땐 skip 을 쓰면 된다.


db.nettuts.find({gender: 'm', $or: [{nationality: 'english'}, {nationality: 'american'}]}).limit(2).skip(2);


자 그럼 이것을 가지고 페이징 처리를 하는 쿼리를 만들어 보겠다.


첫 페이지를 보여줄때는 이렇게 하면 될 것 같다.


db.nettuts.find({gender: 'm', $or: [{nationality: 'english'}, {nationality: 'american'}]}).limit(10).skip(0);


skip에 0을 적어서 아무것도 스킵되지 않도록 한다.


맨 위에 10개를 보여주기 위해서 limit 에 10을 적는다.


자. 만약에 한 페이지에 10개씩 보여주기로 했다면 limit 은 계속 10이면 된다.


skip만 10씩 증가하면 된다.


정말 간단하다.


db.nettuts.find({gender: 'm', $or: [{nationality: 'english'}, {nationality: 'american'}]}).limit(10).skip(0);


db.nettuts.find({gender: 'm', $or: [{nationality: 'english'}, {nationality: 'american'}]}).limit(10).skip(10);


db.nettuts.find({gender: 'm', $or: [{nationality: 'english'}, {nationality: 'american'}]}).limit(10).skip(20);


db.nettuts.find({gender: 'm', $or: [{nationality: 'english'}, {nationality: 'american'}]}).limit(10).skip(30);


이렇게 말이다.


이제 update 를 살펴본다.


update


update는 쿼리를 이렇게 작성하면 된다.


db.nettuts.update({first: 'james', last: 'caan'}, {$set: {hair_colour: 'brown'}});


이번에는 데이터를 삭제해보자.


delete


db.nettuts.remove({first: 'james', last: 'caan'});


이렇게 하면 삭제가 된다.


NoSQL Booster for Mongo DB에 대해서도 조금 알아보자.



실행하면 빈 화면이 나타날 것이다.


연결을 만들어야 사용 할 수 있다.


Connect 를 클릭한다.



Server부분에 주소를 적는다.


localhost 대신 다른 주소를 적어도 된다.


Name 은 연결의 이름이다.


이렇게 연결을 수립하면 화면 왼쪽에 표시된다.


그리고 DB를 만들 수 있다.



'Database | 데이터베이스 > NoSQL' 카테고리의 다른 글

Mongo DB의 index  (0) 2019.09.30
Mongo DB Compass select 문  (0) 2019.03.28
NoSQL 간단 정리 - 개요 , 모델링 예시  (0) 2018.10.11

댓글