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

MongoDB에서 접두사 문자열을 붙여 배열의 모든 요소를 업데이트하는 방법

MongoDB에서 배열에 저장된 모든 요소에 접두사(prefix) 문자열을 붙여 업데이트하려면 forEach() 메서드를 사용하면 됩니다. 이 글에서는 실제 예제를 통해 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성

먼저 문서가 포함된 컬렉션을 생성합니다. 아래 예제에서는 학생 이름 배열을 가진 두 개의 문서를 삽입합니다.

> db.replaceAllElementsWithPrefixDemo.insertOne(
    {
       "StudentNames" : [
          "John",
          "Carol"
       ]
    }
);
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd91908b50a6c6dd317ad8e")
}
>
>
> db.replaceAllElementsWithPrefixDemo.insertOne(
    {
       "StudentNames" : [
          "Sam"
       ]
    }
);
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd9191cb50a6c6dd317ad8f")
}

2. 저장된 문서 확인하기

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

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

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

{
   "_id" : ObjectId("5cd91908b50a6c6dd317ad8e"),
   "StudentNames" : [
      "John",
      "Carol"
   ]
}
{
   "_id" : ObjectId("5cd9191cb50a6c6dd317ad8f"),
   "StudentNames" : [
      "Sam"
   ]
}

3. 접두사 문자열을 추가해 배열 전체 업데이트하기

이제 배열의 모든 요소 앞에 "MR."이라는 접두사를 붙여 업데이트해 보겠습니다. forEach()로 각 문서를 순회하고, map()으로 새로운 배열을 만든 뒤 $set 연산자로 기존 배열을 대체하는 방식입니다.

> db.replaceAllElementsWithPrefixDemo.find().forEach(function (myDocumentValue) {
   var prefixValue = myDocumentValue.StudentNames.map(function (myValue) {
      return "MR." + myValue;
   });
   db.replaceAllElementsWithPrefixDemo.update(
      {_id: myDocumentValue._id},
      {$set: {StudentNames: prefixValue}}
   );
});

쿼리 동작 방식

  • forEach(): 컬렉션의 각 문서를 하나씩 순회합니다.
  • map(): StudentNames 배열의 각 요소 앞에 "MR."을 붙인 새로운 배열을 생성합니다.
  • update() + $set: 해당 문서의 _id를 기준으로 기존 배열을 접두사가 추가된 새 배열로 교체합니다.

4. 업데이트 결과 확인

업데이트가 완료되었다면 문서를 다시 한번 조회해 보겠습니다.

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

실행 결과, 모든 이름 앞에 "MR." 접두사가 성공적으로 붙은 것을 확인할 수 있습니다.

{
   "_id" : ObjectId("5cd91908b50a6c6dd317ad8e"),
   "StudentNames" : [
      "MR.John",
      "MR.Carol"
   ]
}
{
   "_id" : ObjectId("5cd9191cb50a6c6dd317ad8f"),
   "StudentNames" : [
      "MR.Sam"
   ]
}

마무리

이처럼 forEach()와 map(), 그리고 $set 연산자를 조합하면 배열의 모든 요소에 일괄적으로 접두사를 손쉽게 추가할 수 있습니다. 참고로 최신 MongoDB 버전에서는 updateOne() 또는 updateMany() 사용이 권장되며, 더 복잡한 변환 로직이 필요하다면 집계 파이프라인 기반 업데이트도 고려해볼 수 있습니다.