Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 데이터 업데이트하기: update() 메서드 사용법 완벽 가이드

MongoDB에서 기존 데이터를 수정하려면 update() 메서드를 사용합니다. 이 글에서는 실제 예제를 통해 컬렉션을 만들고, 문서를 삽입한 뒤, 특정 문서의 필드 값을 변경하는 전체 과정을 단계별로 살펴보겠습니다.

1단계: 컬렉션 생성 및 문서 삽입

먼저 insertOne() 메서드를 사용해 demo110 컬렉션에 세 개의 문서를 삽입합니다.

> db.demo110.insertOne({"Name":"Chris"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e2eeb949fd5fd66da21447b")
}
> db.demo110.insertOne({"Name":"David"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e2eeb9f9fd5fd66da21447c")
}
> db.demo110.insertOne({"Name":"Bob"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e2eeba39fd5fd66da21447d")
}

2단계: find()로 전체 문서 조회

find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.

> db.demo110.find();

위 명령을 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5e2eeb949fd5fd66da21447b"), "Name" : "Chris" }
{ "_id" : ObjectId("5e2eeb9f9fd5fd66da21447c"), "Name" : "David" }
{ "_id" : ObjectId("5e2eeba39fd5fd66da21447d"), "Name" : "Bob" }

3단계: update() 쿼리로 데이터 수정

이제 update() 메서드와 $set 연산자를 사용하여 특정 문서의 Name 필드 값을 "Robert"로 변경해 보겠습니다. 여기서는 ObjectId를 조건으로 지정해 정확히 하나의 문서만 대상으로 합니다.

> db.demo110.update({_id:ObjectId("5e2eeb9f9fd5fd66da21447c")},{$set:{"Name":"Robert"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

실행 결과인 WriteResult 객체의 의미는 다음과 같습니다.

  • nMatched : 1 — 조건에 일치한 문서가 1개
  • nUpserted : 0 — 새로 삽입된 문서 없음
  • nModified : 1 — 실제로 수정된 문서가 1개

4단계: 업데이트 결과 확인

다시 find() 메서드를 실행해 변경 사항이 제대로 반영되었는지 확인합니다.

> db.demo110.find();

출력 결과를 보면 두 번째 문서의 Name 값이 "David"에서 "Robert"로 성공적으로 변경된 것을 알 수 있습니다.

{ "_id" : ObjectId("5e2eeb949fd5fd66da21447b"), "Name" : "Chris" }
{ "_id" : ObjectId("5e2eeb9f9fd5fd66da21447c"), "Name" : "Robert" }
{ "_id" : ObjectId("5e2eeba39fd5fd66da21447d"), "Name" : "Bob" }

참고: 최신 MongoDB에서 권장되는 방법

구버전에서 사용되던 update()는 현재 deprecated(사용 중단 예정) 상태이므로, 최신 MongoDB 환경에서는 용도에 따라 아래 메서드를 사용하는 것이 좋습니다.

  • updateOne() — 조건에 일치하는 첫 번째 문서 하나만 수정
  • updateMany() — 조건에 일치하는 모든 문서를 한 번에 수정
  • replaceOne() — 문서 전체를 새 문서로 교체

예를 들어 위 예제는 다음과 같이 작성할 수 있습니다.

> db.demo110.updateOne(
...    {_id: ObjectId("5e2eeb9f9fd5fd66da21447c")},
...    {$set: {"Name": "Robert"}}
... );

동작 방식은 동일하지만, 최신 메서드를 사용하면 더 명확한 의미 전달과 향후 버전 호환성을 확보할 수 있습니다.