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

MongoDB 하위 컬렉션 업데이트 방법 – $push 연산자와 점 표기법 활용

MongoDB에서 하위 컬렉션 업데이트하기 – $push와 점 표기법 활용

MongoDB에서 중첩된 문서(하위 컬렉션) 내부의 데이터를 수정하려면 update() 메서드를 사용하면 됩니다. $push 연산자로 지정한 값을 배열 끝에 추가하고, 점 표기법(dot notation)을 이용해 하위 필드까지 경로를 지정하면 한 번의 업데이트 작업으로 원하는 위치의 값을 손쉽게 변경할 수 있습니다.

1단계: 샘플 컬렉션 생성

먼저 테스트에 사용할 문서를 포함한 컬렉션을 생성합니다.

> db.demo547.insertOne(
... {
...    Name : "Chris",
...    Test :
...    {
...       "FirstTest" :
...       {
...          Scores: [56,29,76]
...       },
...       "SecondTest" :
...       {
...          Scores: [98,91,78]
...       }
...    }
... }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e8e2d579e5f92834d7f05dd")
}

2단계: 문서 조회

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

> db.demo547.find();

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

{ "_id" : ObjectId("5e8e2d579e5f92834d7f05dd"), "Name" : "Chris", "Test" : { "FirstTest" : { "Scores" : [ 56, 29, 76 ] }, "SecondTest" : { "Scores" : [ 98, 91, 78 ] } } }

3단계: 하위 컬렉션 업데이트 쿼리 실행

다음은 점 표기법으로 Test.FirstTest.Scores 경로에 접근한 뒤, $push 연산자를 사용해 값 99를 배열에 추가하는 쿼리입니다.

> db.demo547.update({"Name":"Chris"}, { $push:{ "Test.FirstTest.Scores" : 99}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

실행 결과에서 nModified가 1로 표시되는데, 이는 하나의 문서가 성공적으로 수정되었음을 의미합니다.

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

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

> db.demo547.find();

출력 결과를 보면 FirstTest의 Scores 배열 끝에 99가 추가된 것을 확인할 수 있습니다.

{ "_id" : ObjectId("5e8e2d579e5f92834d7f05dd"), "Name" : "Chris", "Test" : { "FirstTest" : { "Scores" : [ 56, 29, 76, 99 ] }, "SecondTest" : { "Scores" : [ 98, 91, 78 ] } } }

참고 사항

MongoDB 최신 버전에서는 기존의 update() 대신 updateOne() 또는 updateMany() 사용이 권장됩니다. 동작 방식은 동일하며, 조건에 일치하는 여러 문서를 한 번에 수정해야 할 경우 updateMany()를 사용하면 됩니다. 또한 $push 외에도 $addToSet(중복 없이 추가), $set(값 덮어쓰기) 등의 연산자를 상황에 맞게 활용하면 더욱 유연한 업데이트가 가능합니다.