본문 바로가기
Node.js

데이터베이스 - Mongoose

by Programmer.Junny 2025. 1. 20.

1. 몽구스(Mongoose) 사용하기

1.1. 몽구스란?

MySQL의 시퀄라이즈 ORM 처럼 각 컬럼(도큐먼트)를 매핑해주는 패키지이다.

1.2. 몽구스 설치

npm i mongoose

1.3. 몽구스 연결하기

// schemas - index.js
const mongoose = require('mongoose');

const connect = () => {
  if (process.env.NODE_ENV !== 'production') {
    mongoose.set('debug', true);
  }
  mongoose.connect('mongodb://localhost:27017/admin', {
    dbName: 'nodejs',
    useNewUrlParser: true,
  }).then(() => {
    console.log("몽고디비 연결 성공");
  }).catch((err) => {
    console.error("몽고디비 연결 에러", err);
  });
};

mongoose.connection.on('error', (error) => {
  console.error('몽고디비 연결 에러', error);
});
mongoose.connection.on('disconnected', () => {
  console.error('몽고디비 연결이 끊겼습니다. 연결을 재시도합니다.');
  connect();
});

module.exports = connect;

mongoose 내의 connect() 를 사용하여 MongoDB와 연결이 가능하다.

2. 몽구스 스키마 작성

// schemas - index.js
const mongoose = require('mongoose');

const connect = () => {
  if (process.env.NODE_ENV !== 'production') {
    mongoose.set('debug', true);
  }
  mongoose.connect('mongodb://localhost:27017/admin', {
    dbName: 'nodejs',
    useNewUrlParser: true,
  }).then(() => {
    console.log("몽고디비 연결 성공");
  }).catch((err) => {
    console.error("몽고디비 연결 에러", err);
  });
};

mongoose.connection.on('error', (error) => {
  console.error('몽고디비 연결 에러', error);
});
mongoose.connection.on('disconnected', () => {
  console.error('몽고디비 연결이 끊겼습니다. 연결을 재시도합니다.');
  connect();
});

module.exports = connect;
// schemas - user.js
const mongoose = require('mongoose');

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

module.exports = mongoose.model('User', userSchema);
// schemas - comment.js
const mongoose = require('mongoose');

const { Schema } = mongoose;
const { Types: { ObjectId } } = Schema;
const commentSchema = new Schema({
  commenter: {
    type: ObjectId,
    required: true,
    ref: 'User',
  },
  comment: {
    type: String,
    required: true,
  },
  createdAt: {
    type: Date,
    default: Date.now,
  },
});

module.exports = mongoose.model('Comment', commentSchema);

위 코드에서 알 수 있듯 ObjectId를 가져오기 위해선 분해를 해서 가져와야한다.

const { Schema } = mongoose;
const { Types: { ObjectId } } = Schema;
mongoose.Schema.Types.ObjectId

꼭 분해하지 않아도 위와 같은 방법으로도 사용이 가능하다.

comment.js 내의 ref: 'User' 부분을 보면 User를 참조한다는 내용이라는 것을 알 수 있다.

이것은 기존 SQL의 join 혹은 시퀄라이즈의 include와 같은 역할을 한다.

ref: 'User' 는 user.js 스키마를 의미하며, 즉 commenter 의 type : ObjectIdUser의 ObjectId를 가르킨다.

최근댓글

최근글

skin by © 2024 ttuttak