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 : ObjectId는 User의 ObjectId를 가르킨다.
'Node.js' 카테고리의 다른 글
Socket.io - 통신 방법, 네임스페이스, Room, broadcast, private (0) | 2025.02.03 |
---|---|
Socket.io - 정의, 설치, 작동 원리, 특징 (0) | 2025.02.03 |
데이터베이스 - MongoDB CRUD 작업하기 (0) | 2025.01.20 |
데이터베이스 - MongoDB 데이터베이스 및 컬렉션 생성 (0) | 2025.01.18 |
데이터베이스 - NoSQL (MongoDB) (0) | 2025.01.17 |