작성
·
125
0
13:28 delete 부분에서 강의를 보면
const contact = await Contact.findById(id);
를 통해서 정보를 contact 변수에 할당하고
막상 deleteOne함수는 Contact에서 합니다
contact에서 deleteOne을 사용하면 안되나요?
Contact에서와 contact에서 deleteOne을 사용했을 때의 차이가 궁금하고
Contact에서 delete를 할 것이면 왜 굳이 새로운 변수에 할당을 해주는 것인지 궁금합니다
답변 1
0
안녕하세요, 인프런 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
변수에 할당하여 사용하는 이유는 해당 문서에 대해 더 다양한 작업을 수행하려는 경우가 아닐까 생각됩니다. 예를 들어, 삭제하기 전에 해당 데이터의 내용을 확인하거나, 다른 처리를 하기 위해선 문서 인스턴스가 필요할 수 있습니다.