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

MongoDB에서 숫자 문자열을 숫자로 변환하는 쿼리 방법

MongoDB에서 문자열로 저장된 숫자 데이터를 실제 숫자 타입으로 변환해야 하는 경우가 종종 있습니다. 예를 들어, 데이터 마이그레이션 과정이나 외부 시스템에서 가져온 데이터가 문자열 형태로 저장되어 있을 때 이를 parseInt() 함수를 활용해 손쉽게 변환할 수 있습니다.

테스트용 컬렉션 생성

먼저 변환 작업을 테스트하기 위해 샘플 문서들이 담긴 컬렉션을 생성하겠습니다. 아래 예시에서는 value 필드에 숫자가 아닌 문자열 형태로 값이 저장되어 있습니다.

> db.demo208.insertOne( { "value":"50"} );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e3d92d803d395bdc21346f6")
}
> db.demo208.insertOne( { "value":"2350"} );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e3d92dd03d395bdc21346f7")
}

위 코드에서는 insertOne() 메서드를 사용하여 두 개의 문서를 삽입했습니다. 각각의 value 필드에는 따옴표로 감싸진 문자열 형태의 숫자("50", "2350")가 들어가 있는 점에 주목하세요.

변환 전 데이터 확인

find() 메서드를 사용하여 컬렉션의 모든 문서를 조회해 보겠습니다.

> db.demo208.find();

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

{ "_id" : ObjectId("5e3d92d803d395bdc21346f6"), "value" : "50" }
{ "_id" : ObjectId("5e3d92dd03d395bdc21346f7"), "value" : "2350" }

현재 value 필드의 값이 큰따옴표로 표시되어 있는 것을 확인할 수 있습니다. 즉, 아직 문자열 타입으로 저장되어 있는 상태입니다.

문자열을 숫자로 변환하는 쿼리 실행

이제 forEach() 메서드와 함께 parseInt() 함수를 사용하여 모든 문서의 문자열 값을 숫자로 변환하는 쿼리를 실행합니다.

> db.demo208.find().forEach( function (doc) {
...   doc.value = parseInt(doc.value);
...   db.demo208.save(doc);
...});

이 쿼리의 동작 원리는 다음과 같습니다.

  • find().forEach(): 컬렉션의 모든 문서를 하나씩 순회하며 각 문서에 대해 지정된 함수를 실행합니다.
  • parseInt(doc.value): 각 문서의 value 필드 값을 정수형 숫자로 변환합니다.
  • db.demo208.save(doc): 변경된 문서를 동일한 컬렉션에 다시 저장하여 업데이트를 반영합니다.

변환 후 결과 확인

변환이 완료되었으므로 다시 한번 find() 메서드로 컬렉션의 모든 문서를 조회해 보겠습니다.

> db.demo208.find();

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

{ "_id" : ObjectId("5e3d92d803d395bdc21346f6"), "value" : 50 }
{ "_id" : ObjectId("5e3d92dd03d395bdc21346f7"), "value" : 2350 }

이제 value 필드의 값에서 따옴표가 사라진 것을 확인할 수 있습니다. 문자열이 성공적으로 숫자 타입으로 변환된 것입니다.

참고 사항

실무 환경에서는 몇 가지 추가로 고려할 점이 있습니다.

  • 대량 데이터 처리: 문서 수가 많은 경우 bulkWrite()를 사용하면 개별 저장보다 훨씬 효율적으로 업데이트할 수 있습니다.
  • 소수점 처리: 소수가 포함된 문자열은 parseFloat() 또는 MongoDB의 $toDouble 집계 연산자를 사용하는 것이 좋습니다.
  • 변환 실패 대비: 숫자로 변환할 수 없는 문자열이 섞여 있다면 isNaN() 검사를 추가하여 오류를 방지하는 것이 안전합니다.

이처럼 parseInt()forEach()를 조합하면 MongoDB에서 문자열로 저장된 숫자 데이터를 간단하고 빠르게 숫자 타입으로 일괄 변환할 수 있습니다.