8.1 데이터베이스 및 컬렉션 생성하기
데이터베이스 생성 명령어 use [데이터베이스]
데이터베이스 목록 확인 명령어 show dbs
현재 사용 중인 데이터베이스 확인 명령어 db
컬렉션 생성 명령어 db.createCollection(' ')
컬렉션 생성 목록 확인 명령어 show collections
8.2 CRUD 작업하기
8.2.1 Create (생성)
컬렉션에 컬럼을 정의하지 않아도 되므로 컬렉션에는 아무 데이터나 넣을 수 있다.
이러한 자유로운 점이 몽고디비의 장점이다.
기본적으로 몽고디비는 자바스크립트 문법을 사용하므로 자바스크립트 자료형을 따르나 추가로 몇 가지 자료형이 더있다.
Data나 정규 표현식 같은 자바스크립트 객체를 자료형으로 사용할 수 있고, Binary Data, ObjectId, Int, Long, Decimal, Timestamp, JavaScript 등이 있다.
db.컬렉션명.inserOne(다큐먼트)로 다큐먼트를 생성한다.
new Date()는 현재 시간을 입력하라는 뜻이다.
명령이 성공적으로 수행되면 acknowledged와 insertedId: ObjectId라는 응답이 오는데, 이 오브젝트 아이디가 검색할 때 쓰이는 키이다.
db.컬렉션.find() 명령어를 통해 해당 id의 ObjectId를 알 수 있다.
8.2.2 Read (조회)
find({})는 컬렉션 내의 모든 다큐먼트를 조회하라는 뜻이다.
특정 필드만 조회도 가능하다.
1또는 true로 표시한 필드만 가져온다.
_id는 기본적으로 가져오게 되어있어 안 가져오려면 0또는 false를 입력하여야 한다.
조회 시 조건
$gt를 통해 age가 25 초과이고, married가 true인 다큐먼트를 조회하였다.
$gt : 초과
$gte: 이상
$lt: 미만
$lte: 이하
$ne: 같지 않음
$or: 또는
$in: 배열 요소 중 하나
or 연산
or 연산을 통해 age가 25초과이거나 married가 false인 다큐먼트를 조회하였다.
조회 시 정렬 sort()
age가 내림차순으로 정렬되었다.
-1는 내림차순, 1은 오름차순이다.
조회 개수 설정 limit()
limit(1)로 인해 한 개만 조회되었다.
조회 건너뛰기 skip()
skip(1)로 한 개 다큐먼트를 건너뛰었다.
8.2.2 Update (수정)
updateOne 수정하기
첫 번째 객체는 수정할 다큐먼트를 지정하고, 두 번째 객체는 수정할 내용을 입력한다.
$set이라는 연산자는 어떤 필드를 수정할지 정하는 연산자이다.
이 연산자를 사용하지 않고 일반 객체를 넣으면 다큐먼트가 통째로 두 번째 인수로 수정되어버린다.
8.2.2 Delete (삭제)
deleteOne 삭제하기
삭제할 다큐먼트에 대한 정보가 담긴 객체를 첫 번째 인수로 제공한다.
deleteOne은 하나의 다큐먼트만 삭제하고, 여러 건을 삭제한다면 deleteMany를 사용한다.
8.3 몽구스 사용하기
MySQL에 시퀄라이즈가 있다면 몽고디비에는 몽구스가 있다.
몽구스는 시퀄라이즈와 달리 릴레이션이 아니라 다큐먼트를 사용함으로 ORM이 아닌 ODM이다.
몽고디비 자체가 자바스크립트이지만 자바스크립트 객체와 매핑하는 이유는 몽고디비에 없어서 불편한 기능들을 몽구스가 보안해주기 때문이다.
1. 스키마
몽고디비는 테이블이 없어 자유롭게 데이터를 넣을 수 있지만 실수로 잘못된 자료형을 넣거나 없는 필드의 데이터를 넣을 수 있다는 단점이 있다. 따라서 몽구스는 데이터를 넣기 전 노드 서버에서 데이터를 한번 필터링하는 역할을 한다.
2. 조인 기능 보완
MySQL에 있는 JOIN 기능을 populate라는 메서드로 보완할 수 있다.
3. 가독성이 높은 쿼리 빌더 지원
8.3.1 몽고디비 연결하기
mongodb 설정 방법은 다음 과 같다.
mongodb://이름:비밀번호@호스트:포트/데이터베이스명
db 연결이 성공한다면 몽고디비 연결 성공, 실패한다면 몽고디비 연결 에러와 함께 에러가 출력된다.
app.js에 쓰기 위해 connect을 모듈화한다.
8.3.2 스키마 정의하기
Schema 생성자를 사용해 스키마를 만든다.
몽구스는 알아서 _id를 기본 키로 생성하므로 id 필드는 필요 없다.
몽구스 스키마는 String, Number, Date, Buffer, Boolean, Mixed, ObjectId, Array를 값으로 가질 수 있다.
require는 필수로 있어야 된다는 뜻이다.
'Programming > NodeJS' 카테고리의 다른 글
NPM (Node Package Manager)? (0) | 2024.12.22 |
---|---|
Node.js 교과서 복습 (1) | 2024.02.25 |
Node.js 교과서 [NoSQL] #8 (0) | 2024.02.18 |
Node.js 교과서 [MySQL] #7 (1) | 2024.02.17 |
Node.js 교과서 [Express, Middleware, Route, 템플릿 엔진] #6 (1) | 2024.02.11 |