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

MongoDB 위치 연산자($[]) 활용법: 배열의 모든 요소를 한 번에 업데이트하는 방법

MongoDB에서 배열 필드의 모든 요소를 한 번에 수정하고 싶다면 모든 위치 연산자(all positional operator)$[]를 활용할 수 있습니다. 이 글에서는 실제 예제를 통해 위치 연산자를 사용해 배열 값을 일괄 변경하는 과정을 단계별로 살펴보겠습니다.

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

먼저 데모용 컬렉션을 생성하고 문서를 삽입합니다.

> db.demo324.insertOne({"ListOfValues":[10,20,30]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e516349f8647eb59e562073")
}

2. 삽입된 문서 확인

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

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

위 쿼리는 다음과 같은 결과를 출력합니다.

{
    "_id" : ObjectId("5e516349f8647eb59e562073"),
    "ListOfValues" : [
        10,
        20,
        30
    ]
}

3. 위치 연산자($[])를 사용한 업데이트 쿼리

이제 $[] 연산자를 활용해 배열 내 모든 요소를 한꺼번에 변경하는 업데이트 쿼리를 실행해 보겠습니다.

> db.demo324.update({"ListOfValues":[10,20,30]},{ $set: { "ListOfValues.$[]": "MongoDB" } }, { upsert: true } );
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

실행 결과를 보면 조건에 일치한 문서가 1개(nMatched: 1)이고, 실제로 수정된 문서도 1개(nModified: 1)임을 확인할 수 있습니다.

4. 업데이트 결과 확인

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

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

결과는 다음과 같습니다.

{
    "_id" : ObjectId("5e516349f8647eb59e562073"),
    "ListOfValues" : [
        "MongoDB",
        "MongoDB",
        "MongoDB"
    ]
}

배열에 있던 숫자 값 10, 20, 30이 모두 문자열 "MongoDB"로 일괄 변경된 것을 볼 수 있습니다.

정리

$[] 연산자는 배열 필드의 모든 요소를 대상으로 업데이트를 적용할 때 매우 유용합니다. 조건 없이 배열 전체를 한 번의 쿼리로 수정할 수 있어 코드가 간결해지고 성능 면에서도 효율적입니다. 참고로 $[] 연산자는 MongoDB 3.6 이상 버전에서 지원되며, 특정 조건에 맞는 요소만 선택적으로 수정하고 싶다면 $[identifier] 연산자와 arrayFilters 옵션을 함께 사용하면 됩니다.