안녕하세요. 이번 시간에는 CRUD 마지막 시간으로 Delete 기능에 대해 알아보겠습니다.
문서를 지우는 작업이니만큼 신중하게 해야합니다. 몽고DB는 롤백(이전으로 되돌리는 기능)을 지원하지 않습니다. 롤백하는 한 가지 방법이 있긴 합니다. 그 방법은 나중에 설명할 oplog를 사용하는 겁니다. oplog란 미리 알려드리자면, 데이터베이스에 어떤 쿼리를 했는지 기록으로 남겨두는 겁니다. 그 기록을 거꾸로 돌리면 롤백과 유사한 효과를 볼 수 있습니다. 하지만 지금은 oplog를 사용하지 않기 때문에 삭제하는 데 주의하도록 합시다.
Remove
db.test.remove({ });
를 하면 전체가 지워집니다. 지우는 동작을 하기 전에는 항상 신중하게 판단하고 하세요. 책임은 자신에게 있습니다.
db.monsters.insert({ name: 'Zerp' });
Zero 몬스터를 만들려다 실수로 오타를 냈습니다. 이것을 삭제해 봅시다. 첫 번째 인자가 지울 다큐먼트를 선택하는 부분입니다.
db.monsters.remove({ name: 'Zerp' }); // WriteResult({ 'nRemoved': 1 })
잘 지워졌습니다. nRemoved는 지워진 다큐먼트의 수를 의미합니다.
DeleteOne, DeleteMany
몽고DB 3.2 버전부터는 Remove 메소드를 대체하는 두 메소드가 추가되었습니다.
db.monsters.deleteOne({ name: 'Zerp' });
사용 방법은 거의 같습니다. 하지만 deleteOne은 매칭되는 첫 번째 다큐먼트만 지우고, deleteMany는 매칭되는 모든 다큐먼트를 지운다는 점에서 차이가 있습니다. remove 메소드를 세분화한 겁니다.
다음 시간에는 쿼리 연산자에 대해 알아보겠습니다!