꾸준한 개발자

계속적인 성장을 추구하는 개발자입니다. 꾸준함을 추구합니다.

계속 쓰는 개발 노트

DATABASE

mongoDB (AWS EC2)

gold_dragon 2020. 11. 30. 16:37

몽고디비 설치

sudo apt update -y
sudo apt upgrade -y
sudo apt install -y mongodb
sudo systemctl status mongodb

sudo vi /etc/mongodb.conf

# bind_ip = 0.0.0.0

# auth = true

 

이후 mongo 명령어로 mongoDB를 실행합니다.

그리고 다음 명령어를 입력합니다.

use admin

db.createUser({ user: "<아이디>, pwd:<비밀번호>, roles: [ "root" ] })

 

패스워드 설정 후 quit() 명령어를 입력하면 mongoDB에서 나올 수 있습니다.

 

이후 robomongo를 설치해줍니다.

 

실행시킨 후 AWS EC2에서 만든 서버로 접속합니다.

 

create database

# mongo 라는 이름의 데이터 베이스 생성
use mongo

 

# 현재 사용중인 데이터 베이스 확인
db

 

# database list 확인
show dbs
- 데이터 베에스를 생성후에 최소 1개이상의 document를 추가해야 생성된 데이터 베이스가 보
입니다.

 

delete database

# 현재 사용중인 데이터 베이스 삭제
db.dropDatabase()

 

Create Collection

db.createCollection(name, [option])

option은 컬렉션 공간 설정을 해줍니다. size -> 숫자 데이터를 사용하며 collection의 최대 사이즈를 byte 단위로 지정합니다. max -> 숫자 데이터를 사용하며 최대 document 갯수를 설정합니다.

 

ex) db.createCollection("info1", { autoIndexId: true, capped: true, size: 500, max:5 })

ex)

# createCollection을 사용하지 않고 article 컬렉션을 생성

db.articles.insert({"title":"data science", "contents":"mongodb"})

 

# 컬렉션 리스트 확인
show collections

 

delete collection

# articles 컬렉션 삭제

ex) db.articles.drop()

 

make document

db.<collection_name>.insert(<document>)

ex)

db.info1.insert({"subject":"python", "level":3})

db.info1.insert({"subject":"web", "level":1})

db.info1.insert({"subject":"sql", "level":2})

 

ex)

# 한번에 여러개의 document 추가

db.info1.insert([

{ "subject":"python", "level":3 },
{ "subject":"web", "level":1 },
{ "subject":"sql", "level":2 },
{ "subject":"python", "level":3 },
{ "subject":"web", "level":1 },
{ "subject":"sql", "level":2 },

])

 

delete document

# level2인 데이터 삭제 : 제약조건이 걸려있는 컬렉션의 도큐먼트는 삭제가 안됩니다.

db.info.remove({level:2})

 

find

db.collection.find(query, projection)

query -> document 조회 조건을 설정합니다. 모든 document를 조회할 때는 ({})를 사용합니다.

projection -> document를 조회할 때 보여지는 필드를 정의합니다.

 

ex) 

# info 컬렉션에 있는 모든 document 조회

db.info.find()

db.getCollection('info').find({})

 

ex)

# subject가 python인 document 조회

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

 

비교 연산자

ex)

# level 2 이하인 document를 조회

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

 

ex)

# level 3 이상인 document를 조회

db.info.find({"level": ({$gte:3}});

 

ex)

# subject가 java와 python을 포함하는 document 조회

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

 

논리 연산자

$or -> 조건 중 하나라도 true이면 true

$and -> 모든 조건이 true이면 true

$not -> 조건 중 하나라도 false이면 true

$nor -> 모든 조건이 false이면 true

 

ex)

# subject가 python이고 level이 3이상인 document 조회

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

 

ex)

# subject가 python이아니고 level이 1이하가 아닌 document 조회

db.info.find({ $nor: [ { "subject":"python" }, { "level": {$lte: 1} } ] })

 

ex)

# level이 2보다 크지 않은 document 조회 (2 포함)

db.info.find({ "level": { $not: {$gt: 2} } })

 

$where

$where 연산자를 사용하면 자바스크립트 표현식 사용이 가능합니다.

 

ex)

# level이 1인 document 조회

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

 

projection

document를 조회할때 보여지는 필드(컬럼)를 정의합니다.

# subject와 comments만 출력되도록 find
# 설정을 true 값을 설정하던가 false 값을 설정합니다. ( _id는 따로 설정을 안하면 true )

 

ex)

db.info.find({}, {"_id":false, "level":false})

db.info.find({}, {"subject":true, "level":true})

 

Find Method

find method를 사용하면 find를 사용한 document의 결과를 가공하여 출력할수 있습니다.

 

sort

document를 정렬시켜 줍니다.

'sort({key: value})' 와 같은 포멧으로 사용을 하며 key는 정렬할 필드명을 작성하고, value는
오름차순은 1, 내림차순을 -1을 넣어주면 됩니다.

 

ex)

# info 컬렉션의 document를 level 오름차순으로 정렬

db.info.find().sort({"level":1})

 

limit

limit을 사용하면 document출력 결과의 수룰 제한할수 있습니다.

 

ex)

# document의 결과를 3개 까지만 출력

db.info.find().limit(3)

 

skip

skip을 검색한 document의 결과의 시작부분을 설정할때 사용합니다.

 

ex)

# document를 3번째 부터 출력

db.info.find().skip(2)

 

update

db.collection.update( query, update, { upsert: <bool>, multi: <bool> })

upsert -> insert와 update의 합성어입니다. 데이터가 있으면 update, 없으면 insert 한다는 의미입니다.

multi -> true로 설정되면 여러개의 document를 수정합니다. 기본값은 false입니다.

 

ex)

# 특정 document를 새로운 document로 수정하기

db.info.update(

    {"subject":"html"},

    {"subject":"sass", "level":2},

    {"upsert": true}

}

 

$set, $unset

$set을 사용하면 특정 document의 필드를 수정할수 있습니다.

$unset를 사용하면 특정 document의 필드 제거할수 있습니다.

 

ex)

# python의 level을 3으로 수정 (한개의 데이터만 수정)

db.info.update({suject:"python"}, {$set:{level:4}})

 

# level 2를 level 1로 수정 (여러개의 데이터 수정)

db.info.update(

    {level:2},

    {$set: {level: 1}},

    {multi: true}

)

 

# subject가 sass인 document의 level필드 삭제

db.info.update(

    {subject:"sass"},

    {$unset:{level:1}}

)

 

# level이 2이하인 데이터를 1로 수정하기

db.info.update(

    {level:{$lte:2}},

    {$set: {level: 1},

    {multi: 1}

)

 

# level이 없는 데이터 level 추가하기

db.info.update(

    {level: {$exists: false}},

    {$set: {level: 2}},

    {multi: 1}

)

 

Function

자바스크립트 문법으로 함수 작성이 가능합니다.

 

ex)

# skip 함수

var showSkip = function (start) {

    return db.info.find().skip(start)

}

showSkip(3)

'DATABASE' 카테고리의 다른 글

mssql 개인적으로 기억할 query  (0) 2021.05.02
sql 백업  (0) 2020.11.30
sql에서 function 종류  (0) 2020.11.26
데이터베이스 모델링 및 sql문  (0) 2020.11.24
AWS를 이용해서 mysql 사용하기  (0) 2020.11.23