내일배움캠프 노드 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() ==> 정규표현식과 일치하는 문자열을 찾아서 배열을 리턴