반응형
Mongoose save() vs create()
오늘은 Mongoose를 배우는 과정중에 save메소드와 create메소드의 차이가 궁금해졌다.
save와 create 모두 DB에 저장해주는 행동인데 굳이 왜 따로 써야 하는가??? 라는 생각
구티쳐를 통해 해답을 바로 얻을 수 있었다.
먼저 아래 코드를 보면 save메소드를 사용하고 있다.
router.post("/todos", async (req, res) => {
const {value} = req.body;
const maxOrderByUserId = await Todo.findOne().sort("-order").exec();
const order = maxOrderByUserId ? maxOrderByUserId.order + 1 : // 있을 때 +1을 할당
1; // 없을 때 1 을 할당
const todo = new Todo({value, order});
await todo.save();
res.send({todo});
})
다른 것과 다르게 DB에서 받아온 order 값을 변경해서, 저장해줘야 합니다. 그렇기에 인스턴스를 만들어서(new) 메모리상에서 order를 교체를 해주고, 그렇게 바뀐 값을 저장(save)하게 됩니다.
그런데 의문이 생겼습니다.
router.post("/todos", async (req, res) => {
const {value} = req.body;
const maxOrderByUserId = await Todo.findOne().sort("-order").exec();
const order = maxOrderByUserId ? maxOrderByUserId.order + 1 : // 있을 때 +1을 할당
1; // 없을 때 1 을 할당
const todo = await Todo.create({value, order})
res.send({todo});
})
여기서 의문 ... 둘이 뭐가 다른가?....
데이터를 꺼내오거나 프론트에서 데이터를 받아와서 가공이 가능하다!
router.patch("/todos/:todoId", async (req,res) => {
const {todoId} = req.params;
const {order,value,done} = req.body;
console.log(order, value,done)
// 1. todoId에 해당하는 할 일이 있는가?
// 1-1. todoId에 해당하는 할 일이 없으면, 에러를 출력해야 합니다.
const currentTodo = await Todo.findById(todoId);
if (!currentTodo) {
return res.status(400).json({"errorMessage":"존재하지 않는 할 일 입니다."})
};
if (order) {
const targetTodo = await Todo.findOne({order})
if (targetTodo) {
targetTodo.order = currentTodo.order;
await targetTodo.save();
}
currentTodo.order = order
await currentTodo.save();
};
if (value) {
currentTodo.value = value
};
if (done !== undefined) {
currentTodo.doneAt = done ? new Date() : null; // done? true : false
}
currentTodo.save();
res.send();
})
반응형
'Node.JS' 카테고리의 다른 글
Swagger 편하게 사용하기 (0) | 2022.12.23 |
---|---|
Swagger UI 초기설정 (0) | 2022.12.23 |
Node.js Sequelize 사용법 (0) | 2022.12.20 |
내일배움캠프 Node.js 입문주차 과제 (0) | 2022.12.15 |
Node.js Express req 그리고 res (0) | 2022.12.13 |
댓글