MongoDB에서 기존 문서를 수정할 때 update() 메서드가 가장 빠르고 효율적인 방법입니다. save()는 전체 문서를 교체하는 방식이라 불필요한 오버헤드가 발생할 수 있지만, update()는 변경이 필요한 필드만 갱신하므로 성능 면에서 유리합니다.
이번 글에서는 실제 예제를 통해 update() 메서드의 동작 방식을 단계별로 살펴보겠습니다.
1. 샘플 컬렉션 생성
먼저 insertOne() 메서드를 사용해 demo320 컬렉션에 여러 개의 문서를 생성합니다.
> db.demo320.insertOne({"Name":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e50ee51f8647eb59e562066")
}
> db.demo320.insertOne({"Name":"Robert"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e50ee55f8647eb59e562067")
}
> db.demo320.insertOne({"Name":"Mike"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e50ee59f8647eb59e562068")
}
> db.demo320.insertOne({"Name":"Sam"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e50ee5bf8647eb59e562069")
}2. find()로 전체 문서 조회하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo320.find();
위 쿼리를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
{ "_id" : ObjectId("5e50ee51f8647eb59e562066"), "Name" : "Chris" }
{ "_id" : ObjectId("5e50ee55f8647eb59e562067"), "Name" : "Robert" }
{ "_id" : ObjectId("5e50ee59f8647eb59e562068"), "Name" : "Mike" }
{ "_id" : ObjectId("5e50ee5bf8647eb59e562069"), "Name" : "Sam" }3. update()로 문서 수정하기
이제 update() 메서드와 $set 연산자를 조합하여 특정 문서의 필드 값을 변경해 보겠습니다. 아래 쿼리는 Name이 "Mike"인 문서를 찾아 해당 값을 "Bob"으로 수정합니다.
> db.demo320.update({Name:"Mike"},{$set:{Name:"Bob"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })실행 결과의 의미는 다음과 같습니다.
- nMatched : 1 — 조건에 일치한 문서가 1개
- nUpserted : 0 — 새로 삽입된 문서 없음
- nModified : 1 — 실제로 수정된 문서가 1개
4. 업데이트 결과 확인
다시 find() 메서드를 실행하여 변경 사항이 정상적으로 반영되었는지 확인합니다.
> db.demo320.find();
출력 결과를 보면 "Mike"였던 값이 "Bob"으로 성공적으로 변경된 것을 알 수 있습니다.
{ "_id" : ObjectId("5e50ee51f8647eb59e562066"), "Name" : "Chris" }
{ "_id" : ObjectId("5e50ee55f8647eb59e562067"), "Name" : "Robert" }
{ "_id" : ObjectId("5e50ee59f8647eb59e562068"), "Name" : "Bob" }
{ "_id" : ObjectId("5e50ee5bf8647eb59e562069"), "Name" : "Sam" }참고: 최신 MongoDB 버전에서는?
참고로 MongoDB 4.2 이상에서는 update() 대신 updateOne() 또는 updateMany() 사용이 권장됩니다. updateOne()은 조건에 일치하는 첫 번째 문서 하나만 수정하고, updateMany()는 일치하는 모든 문서를 한 번에 수정할 수 있어 의도를 더 명확하게 표현할 수 있습니다.
결론적으로, 부분 필드만 갱신하는 경우에는 update 계열 메서드가 save()보다 빠르고 효율적이며, 이것이 MongoDB에서 문서를 업데이트하는 가장 빠른 방법입니다.