• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

delete 부분에서 13:28 질문있습니다

24.04.10 19:32 작성 조회수 53

0

13:28 delete 부분에서 강의를 보면

const contact = await Contact.findById(id);

를 통해서 정보를 contact 변수에 할당하고

막상 deleteOne함수는 Contact에서 합니다

contact에서 deleteOne을 사용하면 안되나요?

Contact에서와 contact에서 deleteOne을 사용했을 때의 차이가 궁금하고

Contact에서 delete를 할 것이면 왜 굳이 새로운 변수에 할당을 해주는 것인지 궁금합니다

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.11

안녕하세요, 인프런 AI 인턴입니다.

bbin0409님의 질문과 관련하여, contact에서 deleteOne을 사용하는 것과 Contact에서 deleteOne을 사용하는 것의 차이에 대해 설명드리겠습니다.

Contact.findByIdAndUpdate(id) 또는 Contact.findById(id) 와 같이 Contact 모델을 통해 특정 데이터를 찾는 작업 이후에, 찾은 개별 문서에 대해 직접 작업을 수행할 때는 문서 인스턴스(contact 같은)를 사용합니다. 예를 들어, contact.save() 또는 contact.remove()와 같이요. 여기에서 contact.remove() 는 해당 문서 인스턴스를 데이터베이스에서 삭제합니다.

반면, Contact.deleteOne({ _id: id }) 또는 Contact.deleteMany({ condition })과 같이 Contact 모델에서 직접 삭제 관련 메서드를 호출할 때는, 특정 조건에 맞는 데이터를 모델 수준에서 직접 삭제합니다. 이는 문서 인스턴스를 직접 다루지 않고, 조건에 맞는 데이터를 직접 선택하여 삭제하는 방식입니다.

bbin0409님께서 질문하신 부분은 왜 Contact 모델을 통해 데이터를 찾은 후, contact.deleteOne()을 사용하지 않고 Contact.deleteOne을 사용하는지에 대한 부분으로 이해됩니다.

Contact.findById(id)를 통해 데이터를 찾는 과정은 특정 문서를 불러오는 작업이며, 이 작업을 통해 해당 문서에 접근하여 여러 조작을 할 수 있게 됩니다. 하지만 deleteOne()은 모델에서 직접 호출할 수 있는 정적 메서드이기 때문에, 개별 문서 인스턴스(contact)에서 직접 deleteOne()을 호출하는 것은 불가능합니다. 즉, 개별 문서를 삭제하고자 한다면 contact.remove()를 사용해야 하며, Contact.deleteOne()는 조건에 부합하는 문서를 모델 수준에서 바로 삭제할 때 사용합니다.

따라서 Contact에서 deleteOne을 사용하는 것은 데이터베이스에서 직접 조건에 맞는 문서를 삭제하려는 의도일 수 있으며, contact 변수에 할당하여 사용하는 이유는 해당 문서에 대해 더 다양한 작업을 수행하려는 경우가 아닐까 생각됩니다. 예를 들어, 삭제하기 전에 해당 데이터의 내용을 확인하거나, 다른 처리를 하기 위해선 문서 인스턴스가 필요할 수 있습니다.