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

MongoDB 하위 문서(Subdocument)에 새 키 추가하는 방법

MongoDB 하위 문서에 새 키 추가하기

MongoDB에서 기존 문서의 하위 문서(subdocument)에 새로운 키와 값을 추가하려면 $set 연산자를 사용하면 됩니다. $set 연산자는 지정한 경로에 해당 필드가 없으면 자동으로 새로 생성해 주기 때문에, 비어 있는 하위 문서에도 손쉽게 새 키를 삽입할 수 있습니다.

기본 문법

점(.) 표기법을 사용해 외부 필드명과 내부 필드명을 연결하고, $set 연산자로 원하는 값을 지정합니다.

db.yourCollectionName.update({"_id" : yourObjectId },{$set: { "yourOuterFieldName.anyInnerFieldName": yourValue}});

1단계: 예제용 컬렉션 생성

먼저 실습에 사용할 컬렉션을 만들어 보겠습니다. 아래 명령은 UserId 필드와 비어 있는 UserDetails 하위 문서를 가진 문서 하나를 삽입합니다.

> db.pushNewKeyDemo.insertOne({"UserId":100,"UserDetails":{}});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cda58f5b50a6c6dd317adbf")
}

2단계: 삽입 결과 확인

find() 메서드를 사용하여 컬렉션의 모든 문서를 조회합니다.

> db.pushNewKeyDemo.find();

실행 결과는 다음과 같습니다. UserDetails가 아직 빈 객체({ })인 것을 확인할 수 있습니다.

{ "_id" : ObjectId("5cda58f5b50a6c6dd317adbf"), "UserId" : 100, "UserDetails" : { } }

3단계: 하위 문서에 새 키 추가

이제 $set 연산자를 사용해 UserDetails 하위 문서 안에 UserName이라는 새 키를 추가해 보겠습니다. 외부 필드명(UserDetails)과 내부 필드명(UserName)을 점(.)으로 연결하여 경로를 지정하는 것이 핵심입니다.

> db.pushNewKeyDemo.update({"_id" : ObjectId("5cda58f5b50a6c6dd317adbf")},{$set: {
    "UserDetails.UserName": "David Miller"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

WriteResult의 nModified 값이 1이면 하나의 문서가 성공적으로 수정되었음을 의미합니다.

4단계: 업데이트 후 최종 확인

문서를 다시 한번 조회하여 변경 사항을 확인해 보겠습니다.

> db.pushNewKeyDemo.find();

출력 결과를 보면 UserDetails 하위 문서에 UserName 키가 정상적으로 추가된 것을 알 수 있습니다.

{ "_id" : ObjectId("5cda58f5b50a6c6dd317adbf"), "UserId" : 100, "UserDetails" : { "UserName" : "David Miller" } }

참고 사항

MongoDB 4.2 이상 버전에서는 위 예제의 update() 대신 updateOne() 또는 updateMany() 메서드 사용이 권장됩니다. 동작 방식은 동일하며, 첫 번째 인수에는 조건, 두 번째 인수에는 $set 연산자가 포함된 업데이트 내용을 전달하면 됩니다.