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

MongoDB에서 첫 번째 문서에만 새 키(필드)를 추가하며 업데이트하는 방법

MongoDB에서 여러 개의 문서 중 첫 번째 문서에만 새로운 키(필드)를 추가하려면 update() 메서드를 활용하면 됩니다. update()는 기본적으로 조건에 일치하는 첫 번째 문서 하나만 수정하기 때문에, 별도의 복잡한 설정 없이도 원하는 동작을 간단하게 구현할 수 있습니다.

1. 컬렉션 생성 및 문서 삽입

insertOne() 메서드를 사용해 데모용 컬렉션에 세 개의 문서를 삽입해 보겠습니다.

> db.demo162.insertOne({"StudentName":"Chris"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3684359e4f06af551997c2")
}
> db.demo162.insertOne({"StudentName":"Bob"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3684389e4f06af551997c3")
}
> db.demo162.insertOne({"StudentName":"David"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e36843c9e4f06af551997c4")
}

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

find() 메서드를 사용해 컬렉션의 모든 문서를 확인합니다.

> db.demo162.find();

위 명령은 다음과 같은 결과를 출력합니다.

{ "_id" : ObjectId("5e3684359e4f06af551997c2"), "StudentName" : "Chris" }
{ "_id" : ObjectId("5e3684389e4f06af551997c3"), "StudentName" : "Bob" }
{ "_id" : ObjectId("5e36843c9e4f06af551997c4"), "StudentName" : "David" }

현재 세 개의 문서에는 _idStudentName 필드만 존재합니다.

3. update()와 $set으로 첫 번째 문서에 새 키 추가

이제 빈 조건({})과 함께 $set 연산자를 사용해 첫 번째 문서에 StudentAge라는 새 키를 추가합니다.

> db.demo162.update({},{$set:{"StudentAge":23}},{upsert:true});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

실행 결과 nMatched: 1, nModified: 1이 반환되었으므로, 정확히 한 개의 문서만 수정되었음을 알 수 있습니다.

4. 업데이트 결과 확인

다시 find() 메서드로 모든 문서를 조회해 변경 사항을 확인합니다.

> db.demo162.find();
{ "_id" : ObjectId("5e3684359e4f06af551997c2"), "StudentName" : "Chris", "StudentAge" : 23 }
{ "_id" : ObjectId("5e3684389e4f06af551997c3"), "StudentName" : "Bob" }
{ "_id" : ObjectId("5e36843c9e4f06af551997c4"), "StudentName" : "David" }

출력 결과를 보면 첫 번째 문서(Chris)에만 StudentAge: 23이라는 새 키가 추가되었고, 나머지 문서는 그대로 유지된 것을 확인할 수 있습니다.

핵심 포인트 정리

  • update({}, {$set: {...}}): 빈 쿼리 조건은 컬렉션의 모든 문서와 일치하지만, 기본적으로 첫 번째 일치 문서만 업데이트됩니다.
  • $set 연산자: 기존 문서에 새 필드를 추가하거나 기존 필드의 값을 변경할 때 사용합니다.
  • multi 옵션: 모든 문서를 한 번에 수정하려면 {multi: true} 옵션을 추가해야 합니다.
  • upsert 옵션: 조건에 일치하는 문서가 없을 경우 새 문서를 자동으로 삽입합니다.