내일배움캠프 노드 4기/Today I Learned
[mongoose] 몽구스 사용해보기
Milb
2022. 12. 19. 21:14
static 미들웨어 적용
// app.js
app.use(express.static("./assets"));
express.static 함수
app.js 파일을 기준으로 입력 값(./assets) 경로에 있는 파일을 아무런 가공 없이 그대로 전달해 주는 미들웨어
몽구스 연결하기
// models/index.js
const mongoose = require("mongoose");
// localhost의 27017 포트 번호로 MongoDB와 연결합니다.
// Database Name은 todo-demo 입니다.
mongoose.connect("mongodb://localhost:27017/todo-demo", {
useNewUrlParser: true,
useUnifiedTopology: true,
})
.then(value => console.log("MongoDB 연결에 성공하였습니다."))
.catch(reason => console.log("MongoDB 연결에 실패하였습니다."))
const db = mongoose.connection;
db.on("error", console.error.bind(console, "connection error:"));
module.exports = db;
.then => 연결 성공 시 메세지 호출
.catch => 연결 실패시 메세지 호출
db.on ~~~ => 연결 실패시 에러 내용 보여주기
가상 스키마 생성
// models/todo.js
const mongoose = require("mongoose");
const TodoSchema = new mongoose.Schema({
value: String,
doneAt: Date,
order: Number
});
TodoSchema.virtual("todoId").get(function () {
return this._id.toHexString();
});
TodoSchema.set("toJSON", {
virtuals: true,
});
module.exports = mongoose.model("Todo", TodoSchema);
_id 는 몽고디비의 컬렉션 안에 컬럼이 생성될 때 자동으로 생성되는 id 입니다.
TodoSchema.virtual ==> 실제 DB에는 존재하지 않지만 사용자가 조회할 때 가상의 컬럼을 추가하여 편리하게 데이터를 가공하거나 사용할 수 있도록 해줍니다.
TodoSchema.set ==> JSON 타입으로 해당 스키마를 변환할 때 가상값인 todoId도 같이 반환하도록 설정하는 것입니다.
.findOne().sort("-order").exec();
const maxOrderByUserId = await Todo.findOne().sort("-order").exec();
findOne() ==> 하나만 찾는다.
sort() ==> 정렬한다.
-order ==> "order" 컬럼을 역순으로
exec() ==> 정규표현식과 일치하는 문자열을 찾아서 배열을 리턴