MongoDB에서 여러 개의 일치하는 문서 중 단 하나의 문서만 수정하고 싶다면 updateOne() 메서드를 사용해야 합니다. updateOne()은 지정한 필터(filter) 조건에 일치하는 첫 번째 문서만 골라 업데이트하며, 나머지 문서나 기존 데이터에는 전혀 영향을 주지 않습니다.
1. 샘플 컬렉션 생성하기
먼저 실습에 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다.
> db.demo495.insertOne({"FirstName":"Chris","Age":19});
{ "acknowledged" : true, "insertedId" : ObjectId("5e84adfeb0f3fa88e22790ca") }
> db.demo495.insertOne({"FirstName":"David","Age":21});
{ "acknowledged" : true, "insertedId" : ObjectId("5e84ae05b0f3fa88e22790cb") }
> db.demo495.insertOne({"FirstName":"Bob","Age":26});
{ "acknowledged" : true, "insertedId" : ObjectId("5e84ae0eb0f3fa88e22790cc") }
> db.demo495.insertOne({"FirstName":"John","Age":22});
{ "acknowledged" : true, "insertedId" : ObjectId("5e84ae15b0f3fa88e22790cd") }2. 현재 저장된 문서 확인하기
find() 메서드를 사용하면 컬렉션에 있는 모든 문서를 조회할 수 있습니다.
> db.demo495.find();
위 명령을 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e84adfeb0f3fa88e22790ca"), "FirstName" : "Chris", "Age" : 19 }
{ "_id" : ObjectId("5e84ae05b0f3fa88e22790cb"), "FirstName" : "David", "Age" : 21 }
{ "_id" : ObjectId("5e84ae0eb0f3fa88e22790cc"), "FirstName" : "Bob", "Age" : 26 }
{ "_id" : ObjectId("5e84ae15b0f3fa88e22790cd"), "FirstName" : "John", "Age" : 22 }3. updateOne()으로 단일 문서만 업데이트하기
이제 updateOne() 메서드와 $set 연산자를 사용해 FirstName이 "David"인 문서 하나만 선택적으로 업데이트해 보겠습니다.
> db.demo495.updateOne({"FirstName":"David"},{$set: {"Age":23} });
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }실행 결과에서 matchedCount는 필터 조건과 일치한 문서 수, modifiedCount는 실제로 수정된 문서 수를 의미합니다. 두 값이 모두 1이므로 정확히 한 개의 문서만 변경되었음을 확인할 수 있습니다.
4. 업데이트 결과 검증하기
다시 find() 메서드로 전체 문서를 조회해 보겠습니다.
> db.demo495.find();
출력 결과를 살펴보면 David의 나이만 21에서 23으로 변경되었고, Chris·Bob·John의 문서는 그대로 유지되었음을 알 수 있습니다.
{ "_id" : ObjectId("5e84adfeb0f3fa88e22790ca"), "FirstName" : "Chris", "Age" : 19 }
{ "_id" : ObjectId("5e84ae05b0f3fa88e22790cb"), "FirstName" : "David", "Age" : 23 }
{ "_id" : ObjectId("5e84ae0eb0f3fa88e22790cc"), "FirstName" : "Bob", "Age" : 26 }
{ "_id" : ObjectId("5e84ae15b0f3fa88e22790cd"), "FirstName" : "John", "Age" : 22 }정리
updateOne()은 필터 조건에 일치하는 첫 번째 문서 하나만 수정하므로, 특정 데이터를 안전하게 변경하면서도 나머지 문서를 그대로 보존할 수 있습니다. 반면 여러 문서를 한 번에 수정하려면 updateMany()를 사용해야 하며, 이 둘의 차이를 이해하는 것이 MongoDB 업데이트 작업의 핵심입니다.