포스트

노드 학습 16일차

오늘은 Node.js에 MongoDB를 설치하고 연결해봤습니다.

MongoDB

현재 NoSQL 중 가장 높은 점유율을 차지하는 데이터베이스 입니다.
NoSQL은 관계형 데이터베이스보다 유연한 데이터 모델을 지원합니다.

SQL과 NoSQL 비교

 SQLNoSQL
장점안정성, 일관성유연성, 가용성
용어테이블, 로우, 컬럼컬렉션, 다큐먼트, 필드
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

다수의 다큐먼트를 삭제합니다.
삭제 조건에 부합하는 다큐먼트를 전부 제거합니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.