몽구스는 시퀄라이즈와 달리 ODM
이라고 불린다. MongoDB는 릴레이션이 아니라 document를 사용하므로 ORM
이 아니라 ODM
이다
MongoDB 자체가 이미 자바스크립트인데도 굳이 자바스크립트 객체와 매핑하는 이유가 궁금할 것이다. 그 이유는 MongoDB에 없어서 불편한 기능을 Mongoose가 보완해주기 때문이다.
Mongoose 의 추가 기능
1. Schema 기능
promise 문법과 강력하고 가독성이 높은 query 빌더를 지원
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
를 가진다