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

MongoDB에서 조건에 맞는 배열 요소를 삽입하는 쿼리 방법

MongoDB에서 특정 조건을 만족하는 문서 내부의 배열에 새로운 요소를 추가하려면 $push 연산자와 위치 연산자($)를 함께 사용하면 됩니다. 이번 글에서는 실제 예제를 통해 그 과정을 단계별로 살펴보겠습니다.

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

먼저 insertOne() 메서드를 사용하여 컬렉션을 생성하고 학생 정보가 담긴 문서를 삽입합니다.

> db.demo11.insertOne({"ListOfStudent":[{"StudentName":"Chris","ListOfScore":[76,67,54,89]}]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e0f6e34d7df943a7cec4fa1")
}

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

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

> db.demo11.find().pretty();

위 쿼리를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.

{
   "_id" : ObjectId("5e0f6e34d7df943a7cec4fa1"),
   "ListOfStudent" : [
      {
         "StudentName" : "Chris",
         "ListOfScore" : [
            76,
            67,
            54,
            89
         ]
      }
   ]
}

3단계: 조건에 맞는 배열 요소 삽입하기

이제 핵심 부분입니다. StudentName이 "Chris"인 문서를 찾아 해당 배열(ListOfScore)에 새 점수 98을 추가해 보겠습니다. 이때 update() 메서드와 함께 $push 연산자, 그리고 쿼리 조건과 일치하는 첫 번째 배열 요소를 가리키는 위치 연산자($)를 사용합니다.

> db.demo11.update( {"ListOfStudent.StudentName":"Chris"}, {$push:{"ListOfStudent.$.ListOfScore":98}} );
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

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

4단계: 변경된 결과 확인

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

> db.demo11.find().pretty();

출력 결과를 보면 ListOfScore 배열 끝에 새로운 점수 98이 정상적으로 추가된 것을 확인할 수 있습니다.

{
   "_id" : ObjectId("5e0f6e34d7df943a7cec4fa1"),
   "ListOfStudent" : [
      {
         "StudentName" : "Chris",
         "ListOfScore" : [
            76,
            67,
            54,
            89,
            98
         ]
      }
   ]
}

정리

이처럼 MongoDB에서는 쿼리 조건으로 대상 문서를 먼저 찾은 뒤, $push 연산자와 위치 연산자($)를 조합하여 조건에 맞는 배열 요소만 정확하게 업데이트할 수 있습니다. 참고로 최신 버전의 MongoDB에서는 하위 호환성을 위해 유지되는 update()보다는 updateOne(), updateMany()처럼 동작이 명확한 메서드를 사용하는 것이 권장됩니다.