Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 자료구조
- Queue
- MySQL
- Dinosaur
- TypeScript
- react
- OCR
- AWS
- nestjs
- GIT
- 게임
- mongoose
- Sequelize
- game
- dfs
- MongoDB
- 공룡게임
- Nest.js
- typeORM
- Bull
- cookie
- nodejs
- class
- JavaScript
- Express
- 정렬
- Python
- jest
- flask
Archives
- Today
- Total
포시코딩
[Mongoose] Schema.virtual을 통해 ObjectId(_id) 다루기 본문
728x90
Schema.virtual이란?
mongoose 라이브러리에서는 MongoDB 내부에는 특정 Column이 존재하지 않지만,
데이터를 조회할 때 가상의 Column을 추가하여 좀 더 편리하게 데이터를 가공하거나 사용할 수 있도록 도와준다.
Schema.set('toJSON', { virtuals: true })은 JSON 타입으로
해당 Schema를 변환할 때 가상값인 todoId를 반환하도록 설정하는 것이다.
Studio 3T와 mongoose의 데이터를 비교해보았을 때,
virtual로 등록된 todoId 값이 MongoDB에는 존재하지 않지만,
mongoose를 이용해 조회하였을 때는 값이 존재하는 것을 확인할 수 있다.
여기서 virtual로 설정한 todoId는 return this._id; 를 이용해 _id
즉, Todo Schema의 ObjectId를 반환하는 것으로 확인할 수 있다.
정리하자면 Schema.virtual을 통해 만든 todoId는
express 서버 내부에서만 보여주는 가상의 column인 것이다.
사용예시
(models/todo.js)
const mongoose = require('mongoose');
const TodoSchema = new mongoose.Schema({
value: String, // 할 일이 어떤것인지
doneAt: Date, // 할 일이 언제 완료되었는지
order: Number, // 몇 번째 할 일인지
});
TodoSchema.virtual('todoId').get(function() { // this를 써야하기 때문에 arrow f이 아닌 function 을 썼다.
return this._id.toHexString();
});
// _id의 경우 toHexString() 처리를 해줘야 에러가 없다고들 한다.
TodoSchema.set('toJSON', { virtuals: true })
// 아래에 해당하는 model을 바탕으로 데이터를 생성, 조회 등을 할 때
// 위에서 지정한 todoId를 JSON 타입으로 변경할 때 보여준다. 라는 의미
module.exports = mongoose.model('Todo', TodoSchema);
728x90
'MongoDB' 카테고리의 다른 글
[Mac] Homebrew를 통해 MongoDB 설치하기 (0) | 2022.12.13 |
---|---|
[Mongoose] exec()의 역할 - 작성중 (0) | 2022.12.12 |
[Mongoose] Object Array 내 데이터 변경 (update values in array of objects) (0) | 2022.11.28 |
[Mongoose] Model ObjectId Type 사용하기 (0) | 2022.11.14 |
맥북 Intel m1에서 local MongoDB 설치 (0) | 2022.11.11 |