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

MongoDB에서 updateOne()으로 단일 문서만 업데이트하는 방법

MongoDB 컬렉션에서 단 하나의 문서만 수정하고 싶다면 updateOne() 메서드를 사용하면 됩니다. 조건에 일치하는 문서가 여러 개 있더라도 updateOne()은 가장 먼저 발견된 첫 번째 문서 하나만 갱신한다는 점이 핵심입니다.

1. 테스트용 컬렉션 생성하기

먼저 insertOne() 메서드를 사용해 샘플 문서들을 담은 컬렉션을 만들어 보겠습니다. 여기서는 학생 정보를 저장하는 updateOneDemo 컬렉션을 생성합니다.

> db.updateOneDemo.insertOne({"StudentId":1,"StudentFirstName":"Chris"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e06ed3725ddae1f53b621e8")
}
> db.updateOneDemo.insertOne({"StudentId":2,"StudentFirstName":"David"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e06ed3825ddae1f53b621e9")
}
> db.updateOneDemo.insertOne({"StudentId":1,"StudentFirstName":"Mike"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e06ed3825ddae1f53b621ea")
}

총 세 개의 문서가 정상적으로 삽입되었습니다. 참고로 StudentId: 1인 문서가 두 개 존재하므로, 이후 업데이트 시 어떤 문서가 수정되는지 확인하기 좋은 예제가 됩니다.

2. find()로 전체 문서 조회하기

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

> db.updateOneDemo.find();

실행 결과는 다음과 같습니다.

{ "_id" : ObjectId("5e06ed3725ddae1f53b621e8"), "StudentId" : 1, "StudentFirstName" : "Chris" }
{ "_id" : ObjectId("5e06ed3825ddae1f53b621e9"), "StudentId" : 2, "StudentFirstName" : "David" }
{ "_id" : ObjectId("5e06ed3825ddae1f53b621ea"), "StudentId" : 1, "StudentFirstName" : "Mike" }

3. updateOne()으로 단일 문서 업데이트하기

이제 updateOne()을 사용해 문서 하나만 수정해 보겠습니다. 아래 쿼리에서는 첫 번째 인수로 빈 필터 {}를 전달했기 때문에 조건에 상관없이 컬렉션에서 가장 먼저 매칭되는 문서 한 건이 선택됩니다.

> db.updateOneDemo.updateOne({},{$set:{"StudentFirstName": "Robert"}});
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

실행 결과의 의미는 다음과 같습니다.

  • matchedCount: 1 — 필터 조건과 일치한 문서가 1개라는 뜻입니다.
  • modifiedCount: 1 — 실제로 값이 변경된 문서가 1개라는 뜻입니다.

$set 연산자는 지정한 필드의 값만 새로 대체하며, 문서의 나머지 필드에는 영향을 주지 않습니다.

4. 업데이트 결과 확인하기

문서가 실제로 수정되었는지 find() 메서드로 다시 한번 전체 데이터를 조회해 보겠습니다.

> db.updateOneDemo.find();

결과는 다음과 같습니다.

{ "_id" : ObjectId("5e06ed3725ddae1f53b621e8"), "StudentId" : 1, "StudentFirstName" : "Robert" }
{ "_id" : ObjectId("5e06ed3825ddae1f53b621e9"), "StudentId" : 2, "StudentFirstName" : "David" }
{ "_id" : ObjectId("5e06ed3825ddae1f53b621ea"), "StudentId" : 1, "StudentFirstName" : "Mike" }

출력 결과를 보면 StudentFirstNameChris → Robert로 변경된 것을 확인할 수 있습니다. 중요한 점은 StudentId: 1인 두 문서(Chris와 Mike) 중 오직 첫 번째 문서인 Chris의 이름만 Robert로 바뀌었다는 사실입니다. 이것이 바로 updateOne()이 여러 개의 일치 문서 중 첫 번째 문서 하나만 갱신한다는 동작 방식입니다.

정리 및 팁

  • 조건에 맞는 모든 문서를 수정하려면 updateMany()를 사용해야 합니다.
  • 특정 문서를 정확히 지정하고 싶다면 빈 필터 {} 대신 {"_id": ObjectId("...")}처럼 고유한 조건을 사용하는 것이 안전합니다.
  • 업데이트 결과의 matchedCountmodifiedCount 값을 활용하면 쿼리가 의도대로 동작했는지 손쉽게 검증할 수 있습니다.