노드 학습 16일차
오늘은 Node.js에 MongoDB를 설치하고 연결해봤습니다.
MongoDB
현재 NoSQL 중 가장 높은 점유율을 차지하는 데이터베이스 입니다.
NoSQL은 관계형 데이터베이스보다 유연한 데이터 모델을 지원합니다.
SQL과 NoSQL 비교
SQL | NoSQL | |
---|---|---|
장점 | 안정성, 일관성 | 유연성, 가용성 |
용어 | 테이블, 로우, 컬럼 | 컬렉션, 다큐먼트, 필드 |
JOIN | 테이블간 JOIN 지원 | 컬렉션간 JOIN 미지원 |
특징 | 규칙에 맞는 데이터 형식 | 자유로운 데이터 형식 |
CRUD
mongosh 에서 사용하는 쿼리입니다.
기타 프로그램에서 사용하는 쿼리는 상이할 수 있습니다. 예) 몽구스
Create
MongoDB에서는 Insert 라는 용어를 사용하고 있습니다.
따라서 사용하는 함수도 Insert 라는 용어를 사용하고 있습니다.
insertOne
하나의 다큐먼트를 저장할 때 사용합니다.
사용예시)
1
2
3
4
5
await db.collection('user').insertOne({
name : '짱구',
age : 5,
gender : 'M'
})
insertMany
여러개의 다큐먼트를 저장할 때 사용합니다.
사용 예시)
1
2
3
4
5
await db.collection('user').insertMany({
// 저장할 값
},{
// 저장할 값
})
Read
MongoDB에서는 Find 라는 용어를 사용합니다.
조회 함수는 Find 라는 용어를 사용합니다.
Find
컬렉션에서 다큐먼트를 조회합니다.
다음의 형식을 따릅니다.
1
db.collection('user').find({조회조건},{조회필드}).커서메서드();
여기서 만약 모든 필드를 조회한다면 생략하거나 빈 값 ({}
) 을 전달합니다.
_id
필드는 _id:0
으로 명시하지 않는한 _id
필드는 항상 조회합니다.
사용 예시)
1
db.collection('user').find({age:{$gt:3}})
user 컬렉션에서 age 필드의 값이 3 초과인 다큐먼트의 모든 필드를 반환 받는 예시
커서 메서드
find()를 통한 쿼리의 결과는 커서를 가리키고 조회 조건 쿼리에서 처리할 수 없는 커서 수준에서 처리해야할 작업을 할 수 있습니다.
다음은 주요 커서 메서드 입니다.
| 이름 | 기능 | | ——– | ——————- | | skip(n) | 다큐먼트 n개를 건너뜀 | | limit(n) | 반환되는 값의 갯수를 n개로 제한함 | | sort() | 특정 필드를 기준으로 정렬 |
조건 연산자
시퀄라이즈의 Op 연산자와 유사하지만 Op
대신 $
를 사용합니다.
Update
updateOne
하나의 다큐먼트를 업데이트 합니다.
조건에 해당하는 다큐먼트가 N개일 경우에는 첫 번째 다큐먼트를 업데이트합니다. 다음의 형식을 따릅니다.
1
2
3
4
5
db.collection('user').updateOne({조건},{
$set:{
필드명:값
}
})
여기서 $set
을 사용하지 않을 경우 특정 필드의 값만 변경하는 것이 아니고 해당 다큐먼트의 값 전체를 바꿔버리기 때문에 주의해야합니다.
예시)
1
2
3
4
5
6
7
8
db.collection('user').updateOne({name:'짱구'},{
$set:{
age:6
},
$currentDate:{
lastModified:true
}
})
$currentDate
업데이트 된 일시를 남기기 위해 주로 사용합니다.
연산자의 사용 방법은 다음과 같습니다. $currentDate:필드명:타입
여기서 필드명에 어떠한 하위 필드를 사용할 때에는 자바스크립트의 점 표기법을 사용합니다.
타입에는 true
를 넣어서 현재 날짜로 설정할 수 있습니다.
혹은 $type:"timestamp"
, $type:"date"
를 사용할 수 있습니다. true
를 사용한 경우 date 타입과 동일하게 적용됩니다.
updateMany
여러 다큐먼트를 업데이트 합니다.
형식은 updateOne 과 동일합니다.
Delete
deleteOne
하나의 다큐먼트를 삭제합니다.
삭제 조건에 대한 결과가 N개인 경우 첫 번째 다큐먼트를 제거합니다.
1
2
3
db.user.deleteOne({
_id: 10
});
deleteMany
다수의 다큐먼트를 삭제합니다.
삭제 조건에 부합하는 다큐먼트를 전부 제거합니다.