[Node.js][TIL] 몽구스(Mongoose)

Trippy·2023년 11월 7일
0

Node.js

목록 보기
8/28
post-thumbnail

몽구스 사용하기

몽구스는 시퀄라이즈와 달리 ODM 이라고 불린다. MongoDB는 릴레이션이 아니라 document를 사용하므로 ORM이 아니라 ODM이다

MongoDB 자체가 이미 자바스크립트인데도 굳이 자바스크립트 객체와 매핑하는 이유가 궁금할 것이다. 그 이유는 MongoDB에 없어서 불편한 기능을 Mongoose가 보완해주기 때문이다.

Mongoose 의 추가 기능
1. Schema 기능

  1. promise 문법과 강력하고 가독성이 높은 query 빌더를 지원

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

몽구스 패키지 설치

//npm 일때
$ npm i mongoose 
//yarn 일때
$ yarn add mongoose

몽고디비 연결하기

먼저 schemas 폴더를 루트 디렉터리에 생성한다. 폴더 안에 index.js 파일을 생성한 후 내용을 다음과 같이 넣는다.

const mongoose = require('mongoose')

const connect = () => {
    mongoose
        .connect(
            `mongodb://아이디:비번@host[:port][/[database][?options]]`,
            { dbName: `db이름` },
            {
                userNewUrlParser: true,
                useUnifiedTopology: true,
            }
        )
        .then(() => console.log('MongoDB 연결 성공!'))
        .catch((err) => console.log('MongoDB 연결 실패!'));
};
mongoose.connection.on('error', (err) => {
    console.error('MongoDB 연결 에러!', err);
});

mongoose.connection.on('disconnecter', () => {
    console.err('MongoDB 연결 실패, 연결을 재시도합니다.');
    connect();
});

module.exports = connect;

app.js를 만들고 schemas/index.js와 연결한다.

const express = require('express')
const path = require('path')

const connect = require('./schemas')

const app = express();

connect();

app.listen(3000, () => {
  console.log('server on', 3000);
}

서버를 실행하면 3000번 포트에서 서버가 돌아간다. 라우터를 만들지 않았기에 실제로 접속할 수는 없지만 다음과 같은 로그가 뜬다.

[nodemon] restarting due to changes...
[nodemon] starting `node app.js`
server on 8080
MongoDB 연결 성공!

스키마 정의하기

// schemas/user.js
const mongoose = require('mongoose')

const  {Schema} = mongoose;
const userSchma = new Schema({
  name: {
    type: String,
    required: true,
    unique: true,
  },
  age: {
    type: Number,
    required: true,
  },
  comment: {
    type: String,
    default: Date.now,
  },
});

module.exports = mongoose.model('User', userSchema);

몽구스는 알아서 _id를 기본 키로 생성하므로 _id필드는 적어줄 필요가 없다.

몽구스 스키마에서 특이한 점은

String Number Date Buffer Boolean Mixed ObjectId Array
를 가진다

profile
감금 당하고 개발만 하고 싶어요

0개의 댓글