MongoDB에서 기존 레코드(문서)를 수정하려면 _id 값을 기준으로 업데이트 작업을 수행해야 합니다. 이 글에서는 실제 예제를 통해 컬렉션을 생성하고, 특정 문서를 업데이트한 후 결과를 확인하는 전체 과정을 단계별로 살펴보겠습니다.
1. 샘플 컬렉션 생성하기
먼저 insertOne() 메서드를 사용하여 demo458이라는 컬렉션에 문서 세 개를 삽입합니다. 각 문서는 고유한 _id와 Name 필드를 가지고 있습니다.
> db.demo458.insertOne( {_id:101,"Name":"David" } );
{ "acknowledged" : true, "insertedId" : 101 }
> db.demo458.insertOne( {_id:102,"Name":"Chris" } );
{ "acknowledged" : true, "insertedId" : 102 }
> db.demo458.insertOne( {_id:103,"Name":"Bob" } );
{ "acknowledged" : true, "insertedId" : 103 }2. 현재 저장된 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다.
> db.demo458.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : 101, "Name" : "David" }
{ "_id" : 102, "Name" : "Chris" }
{ "_id" : 103, "Name" : "Bob" }3. update() 메서드로 레코드 업데이트하기
이제 _id가 102인 문서의 Name 값을 "David Miller"로 변경해 보겠습니다. MongoDB에서는 update() 메서드와 $set 연산자를 함께 사용하여 특정 필드만 선택적으로 수정할 수 있습니다.
> db.demo458.update({_id:102},{$set:{"Name":"David Miller"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })실행 결과에 담긴 의미는 다음과 같습니다.
- nMatched : 1 — 조건(_id:102)에 일치하는 문서가 1개 있음
- nUpserted : 0 — 새로 삽입된 문서는 없음
- nModified : 1 — 실제로 수정된 문서는 1개
4. 업데이트 결과 확인하기
다시 find() 메서드를 실행하여 변경 사항이 정상적으로 반영되었는지 확인합니다.
> db.demo458.find();
출력 결과를 보면 _id가 102인 문서의 Name이 "David Miller"로 성공적으로 변경된 것을 알 수 있습니다.
{ "_id" : 101, "Name" : "David" }
{ "_id" : 102, "Name" : "David Miller" }
{ "_id" : 103, "Name" : "Bob" }정리 및 추가 팁
MongoDB에서 레코드를 업데이트하는 핵심은 조건 쿼리(예: {_id:102})와 $set 연산자를 함께 사용하는 것입니다. 참고로 최신 MongoDB 버전에서는 update() 대신 updateOne(), updateMany() 같은 명확한 메서드 사용이 권장됩니다. 예를 들어 위 예제는 다음과 같이 작성할 수도 있습니다.
> db.demo458.updateOne({_id:102},{$set:{"Name":"David Miller"}});updateOne()은 조건에 일치하는 첫 번째 문서 하나만 수정하고, updateMany()는 일치하는 모든 문서를 한 번에 수정합니다. 상황에 맞는 메서드를 선택하면 더 안전하고 효율적인 데이터 관리가 가능합니다.