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

MongoDB에서 배열의 특정 값을 문자열로 교체하는 방법 ($set과 위치 연산자 활용)

MongoDB에서 배열의 단일 값을 문자열로 바꾸기

MongoDB에서 배열 내부의 특정 값을 다른 문자열로 교체하려면 $set 연산자와 함께 위치 연산자($)를 사용하면 됩니다. 위치 연산자는 쿼리 조건과 일치하는 첫 번째 배열 요소를 자동으로 식별해 주므로, 인덱스를 직접 지정하지 않고도 원하는 값을 손쉽게 수정할 수 있습니다.

먼저 예제에 사용할 컬렉션을 생성하고 문서를 삽입해 보겠습니다.

> db.demo564.insertOne({"StudentName":["Chris","David","Mike","Sam"]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e90880a39cfeaaf0b97b576")
}

삽입된 문서 확인하기

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

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

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{
    "_id" : ObjectId("5e90880a39cfeaaf0b97b576"),
    "StudentName" : [
       "Chris",
       "David",
       "Mike",
       "Sam"
    ]
}

배열 값 교체 쿼리 실행

이제 "David"라는 배열 요소를 "Carol Taylor"라는 문자열로 교체해 보겠습니다. updateMany() 메서드 안에서 조건으로 해당 값을 찾고, $set과 위치 연산자($)를 조합해 일치하는 요소만 새 값으로 덮어씁니다.

> db.demo564.updateMany(
...    { "StudentName": "David" },
...    { "$set": { "StudentName.$": "Carol Taylor" } }
... )
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

실행 결과 matchedCount와 modifiedCount가 각각 1로 표시되며, 이는 하나의 문서가 성공적으로 업데이트되었음을 의미합니다.

업데이트 결과 확인

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

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

출력 결과를 보면 "David"가 "Carol Taylor"로 정상적으로 교체된 것을 확인할 수 있습니다.

{
    "_id" : ObjectId("5e90880a39cfeaaf0b97b576"),
    "StudentName" : [
       "Chris",
       "Carol Taylor",
       "Mike",
       "Sam"
    ]
}

정리

이처럼 MongoDB에서는 { "필드명.$": 새로운값 } 형태의 $set 구문을 사용하면 배열 내 일치하는 첫 번째 요소만 선택적으로 교체할 수 있습니다. 참고로 여러 개의 일치 항목을 모두 수정해야 하는 경우에는 arrayFilters 옵션을 활용하는 것이 좋습니다.