8장 몽고디비

마조리카·2021년 4월 20일
0

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

8.1 NoSQL vs SQL

대표적인 차이점

  • 고정된 테이블이 없으므로 자유로운 데이터 입력이 가능
  • 컬렉션 간 JOIN 미지원
  • 확장성과 가용성이 좋음
  • 용어의 차이 컬렉션, 다큐먼트, 필드
  • 몽고디비를 사용할 일이 있을때마다 mongod 명령어로 먼저 서버를 실행해야 한다.
$ mongod
  • 몽고디비 프롬프트에 접속하려면 mongo 명령어를 한번더.
$ mongo
  • 관리자 계정 추가
$ use admin
$ db.createUser({ user: '이름', pwd: '비밀번호', roles: ['root'[ })
  • 로그인 필요한 몽고디비 실행
$ mongo --auth
  • 몽고디비 로그인
$ mongo admin - u [이름] -p [비밀번호]

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

  • 데이터베이스 만들기
> use [데이터베이스명]
  • 데이터 베이스 목록 확인 명령어
> show dbs
  • 현재 사용중인 데이터베이스를 확인하는 명령어
>db
  • 직접 컬렉션을 생성하는 명령어
> db.createCollection('컬렉션명')

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

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

8.5 CRUD 작업하기

8.5.1 Create(생성)

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

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

Binary Data, ObjectId, Int, Long, Decimal, Timestamp, JavaScripte 등
Binary Data, ObjectId, Timestamp만 자주사용됨.

Undefined와 Symbol은 사용 X

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

8.5.2 Read(조회)

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

↑컬렉션내 모든 다큐먼트 조회

- 특정 필드만 조회

> db.컬렉션명.find({}, {_id:0, name:1, married: 1}):

↑ 조회할 필드에만 true를 넣고, 조회하지 않을 필드에는 false를 넣는다.

  • gt 특수 속성 사용하기
> db.users.find({ age: {$gt: 30}, married: true}, {_id:0, name: 1, age: 1});
  • 정렬
> 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: '안녕하세요. 이 필드를 바꿔보겠습니다.' } });

8.5.4 Delete(삭제)

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

삭제 성공시 삭제된 개수 반환.

8.6 몽구스 사용하기

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

몽구스는 ODM이라 불린다. 그 이유는 몽고디비가 다큐먼트를 사용하기 때문이다.

몽구스는 몽고디비에 불편한 기능을 보완해준다.

  • 스키마 추가, 몽구스는 몽고디비에 데이터를 넣기 전에 노드 서버 단에서 데이터를 한 번 필터링 합니다.
  • JOIN기능을 populate라는 메서드로 어느 정도 보완함.

8.6.1 몽고디비 연결하기

몽구스를 통해 연결, 몽고디비는 주소를 사용해 연결합니다.

mongodb://[username:password@]host[:port]/[database][?options]]

mongodb://이름:비밀번호@localhost:27017/admin

[ ] 이부분은 없어도 되는 부분.

8.6.2 스키마 정의하기

시퀄라이즈에서 테이블을 만들었던 것처럼 몽구스로 스키마를 만들수있다.

Schema 생성자를 사용해 스키마를 만듭니다.

schemas/user.js

const mongoose = require( 'mongoose');

const { Schema } = mongoose;
const userSchema = new Schema({
  name: {
    type: String,
    required: true,
    unique: true;
  },
  });

몽구스에서 _id는 생성하므로 적어줄 필요는 없다.
특이한 점은 String, Number, Date, Buffer, Boolean, Mixed, ObjectId, Array를 값으로 가질 수 있다는 점이다.

0개의 댓글