Node.JS

Mongoose Function save() vs create()

5kiran 2022. 12. 19.
반응형

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

댓글