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

MongoDB에서 $push와 위치 연산자($)로 조건에 맞는 배열 요소 업데이트하기

MongoDB에서 배열 내 특정 조건과 일치하는 요소를 찾아 새로운 값을 추가하려면 update 명령어$push 연산자, 그리고 위치 연산자($)를 함께 사용하면 됩니다. 이 글에서는 실제 예제를 통해 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성하기

먼저 문서가 포함된 컬렉션을 생성합니다. 아래 예제에서는 학생 정보를 담은 demo9 컬렉션을 만들어 보겠습니다.

> db.demo9.insertOne({"StudentDetails":[{"StudentName":"Chris","ListOfSubject":["MySQL","Java"]}]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e0f6438d7df943a7cec4f94")
}

2. 저장된 문서 확인하기

find() 메서드를 사용하면 컬렉션의 모든 문서를 조회할 수 있습니다.

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

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

{
   "_id" : ObjectId("5e0f6438d7df943a7cec4f94"),
   "StudentDetails" : [
      {
         "StudentName" : "Chris",
         "ListOfSubject" : [
            "MySQL",
            "Java"
         ]
      }
   ]
}

3. $push와 위치 연산자로 배열 요소 업데이트하기

이제 조건과 일치하는 배열 요소를 업데이트해 보겠습니다. 쿼리의 필터 부분에서 일치하는 요소의 위치를 지정하는 $(위치 연산자)를 사용하고, $push로 새 값을 추가합니다.

> db.demo9.update( { "StudentDetails.StudentName":"Chris"}, {$push:{"StudentDetails.$.ListOfSubject":"MongoDB"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

여기서 핵심은 StudentDetails.$.ListOfSubject 부분입니다. $는 쿼리 조건(StudentName: "Chris")과 일치한 첫 번째 배열 요소를 가리키며, 해당 요소의 ListOfSubject 배열에 "MongoDB"가 추가됩니다.

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

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

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

업데이트된 결과는 다음과 같습니다.

{
   "_id" : ObjectId("5e0f6438d7df943a7cec4f94"),
   "StudentDetails" : [
      {
         "StudentName" : "Chris",
         "ListOfSubject" : [
            "MySQL",
            "Java",
            "MongoDB"
         ]
      }
   ]
}

정리

MongoDB에서 중첩 배열의 특정 요소를 수정할 때는 다음 세 가지가 핵심입니다.

  • $push: 배열 끝에 새 값을 추가하는 연산자
  • 위치 연산자($): 쿼리 조건과 일치한 첫 번째 배열 요소를 참조
  • update / updateOne: 조건에 맞는 문서를 갱신하는 명령어

참고로 최신 MongoDB 버전에서는 update() 대신 updateOne() 또는 updateMany() 사용이 권장됩니다. 또한 여러 개의 일치하는 요소를 동시에 수정해야 한다면 $[](all positional operator)나 arrayFilters 옵션을 활용할 수 있습니다.