Node.js 교과서 개정 2판 8장 요약

Nari.·2020년 12월 30일
0

Node.js

목록 보기
8/10
post-thumbnail

8장. 몽고디비

몽고디비의 특징 중 하나는 자바스크립트 문법을 사용한다는 것이며, 데이터베이스까지 몽고디비를 사용하면 자바스크립트만을 사용해서 웹애플리케이션을 만드므로 생산성이 매우 높아진다.

8.1 NoSQL vs. SQL

대표적인 차이점

  • 고정된 테이블이 없어서 자유로운 데이터 입력이 가능
  • 컬렉션 간 JOIN 미지원
  • 확장성과 가용성이 좋음
  • 용어의 차이 컬렉션, 다큐먼트, 필드

8.2 몽고디비 설치하기


8.3 컴퍼스 설치하기


8.4 데이터베이스 및 컬렉션 생성하기

  • 몽고디비 시작하기
$ mongo admin -u [이름] -p [비밀번호]

  • 데이터베이스 만드는 명령어
> use [데이터베이스명]

  • 데이터베이스 목록 확인 명령어
> show dbs

-> 데이터를 한 개 이상 넣어야 목록에 표시된다.


  • 현재 사용중인 데이터베이스를 확인하는 명령어
> db

** 컬렉션을 따로 생성하지 않아도 다큐먼트를 넣는 순간 컬렉션이 자동으로 생성된다.


  • 직접 컬렉션을 생성하는 명령어
> db.createCollection('컬렉션명')

  • 생성한 컬렉션 목록 확인
> show collections



8.5 CRUD 작업하기

8.5.1 Create(생성)

컬렉션에 컬럼을 정의하지 않아도 되므로 컬렉션에는 아무 데이터나 넣을 수 있다. 이것이 몽고디비의 장점이자 무엇이 들어올지 모른다는 단점이다.

기본적으로 몽고디비는 자바스크립트 문법을 사용해서 자바스크립트의 자료형을 따르지만 추라고 몇 가지 자료형이 더 있다.


  • 다큐먼트 생성
> db.컬렉션명.save(다큐먼트)



8.5.2 Read(조회)

  • 다큐먼트 조회
> db.컬렉션명.find({});

-> 컬렉션 내의 모든 다큐먼트를 조회하라는 의미


  • 특정 필드만 조회
> db.컬렉션명.find({}, {_id:0, name:1, married: 1});

-> 조회할 필드에만 true 를 의미하는 1을 넣고, 조회하지 않는 필드에는 false를 의미하는 0을 넣었다.


  • gt 특수 속성 사용하기
> db.users.find({ age: {$gt: 30}, married: true}, {_id:0, name: 1, age: 1});

-> age가 30초과이고 married가 true 인 다큐먼트의 이름과 나이를 조회함.


  • 몽고디비 or 연산
> db.users.find({ $or: [{ age: {$gt: 30}}, {married: false}]}, {_id: 0, name: 1, age: 1});

-> age가 30초과 이거나 married가 false dls 다큐먼트 조회


  • 정렬
> db.users.find({}, {_id: 0, name: 1, age: 1}).sort({ age: -1})

-> users라는 컬렉션에서 age 값을 기준으로 내림차순 정렬. -1은 내림차순, 1은 오름차순.


  • 조회할 다큐먼트 개수 설정
> db.users.find({}, {_id: 0, name: 1, age: 1}).sort({ age: -1 }).limit(1)

  • 다큐먼트 개수를 설정하면서 몇 개를 건너뛸지 설정할 수 있다.
> db.users.find({}, {_id: 0, name: 1, age: 1 }).sort({ age: -1}).limit(1).skip(1)


8.5.3 Update(수정)

  • 특정 필드 수정하기
> db.users.update({ name: 'nero' }, { $set: { comment: '안녕하세요. 수정한 필드입니다.' } });

-> $set 연산자를 사용해서 수정하고, 성공했다면 첫 번째 객체에 해당하는 다큐먼트 수(nMatched)와 수정된 다큐먼트 수(nModified)가 나온다.



8.5.4 Delete(삭제)

  • 데이터 삭제
> db.users.remove({ name: 'nero' })

-> 삭제 성공시 삭제된 개수가 반환된다.




8.6 몽구스 사용하기

MySQL에 시퀄라이즈가 있다면 몽고디비에는 몽구스(Mongoose)가 있다.

몽구스는 ODM(Object Document Mapping)이라고 불린다. 그 이유는 몽고디비가 다튜먼트를 사용하기 때문이다.

몽구스는 몽고디비에 없어서 불편한 기능들을 보완해준다. 스키마(schema)가 생겼다. 몽구스는 몽고디비에 데이커를 넣기 전에 노드 서버 단에서 데이터를 한 번 필터링하는 역할을 한다.

또한, MySQL JOIN 기능을 populate라는 메서드로 어느 정도 보완한다.


8.6.1 몽고디비 연결하기

  • 주소 형식
    mongodb://[username:password@]host[:port]/[database][?options]]

** [ ] 부분은 있어도 되고 없어도 된다.
username, password 에는 몽고디비 계정 이름과 비밀번호를 넣는다.
host = localhost,
port = 27017
계정이 있는 database가 admin 이므로

mongodb://이름:비밀번호@localhost:27017/admin
이렇게 입력하면 된다.



8.6.2 스키마 정의하기

몽두스 모듈에서 Schema 생성자를 사용해 스키마를 만드는데, 특이한 점은 String, Number, Date, Buffer, Boolean, Mixed, ObjectId, Array 를 값을 ㅗ가질 수 있다는 점이다.

몽고디비의 자료형과는 조금 다르며 편의를 위해 종류 수를 줄였다.

컬렉션 이름 바꾸기
몽구스는 model 메서드의 첫 번째 인수로 컬렉션 이름을 만든다. 예를들어 첫 번째 인수가 User 라면 첫 글자를 소문자로 만든 뒤 복수형으로 바꿔서 users 컬렉션을 생성한다.
이런 강제 개명이 싫다면 세번째 인수로 컬렉션 이름을 줄 수 있다.
mongoose.model('User', userSchema, 'user_table');
-> users 컬렉션 대신 user_table 컬렉션이 생성된다.

0개의 댓글