몽고디비 설치
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 |