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

MongoDB에서 문자열을 날짜(Date) 타입으로 변환하는 방법

MongoDB에서 날짜 데이터가 문자열(String) 형태로 저장되어 있다면, 이를 적절한 날짜(Date) 타입으로 변환해야 정렬, 범위 조회 등 다양한 쿼리 작업을 효율적으로 수행할 수 있습니다. 문자열을 날짜 타입으로 변환하려면 간단한 스크립트를 작성해야 하는데, 이번 글에서는 forEach()ISODate()를 활용한 변환 방법을 단계별로 살펴보겠습니다.

1. 테스트용 컬렉션 생성하기

먼저 문자열 형태의 날짜 값을 가진 문서들을 포함하는 컬렉션을 생성하겠습니다.

> db.stringToDateDataTypeDemo.insertOne({"CustomerName":"Carol","ShippingDate":"2019-01-21"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ca2071d66324ffac2a7dc60")
}
> db.stringToDateDataTypeDemo.insertOne({"CustomerName":"Bob","ShippingDate":"2019-02-24"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ca2073566324ffac2a7dc61")
}
> db.stringToDateDataTypeDemo.insertOne({"CustomerName":"Chris","ShippingDate":"2019-04-01"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ca2074266324ffac2a7dc62")
}

2. 저장된 문서 확인하기

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

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

실행 결과는 다음과 같습니다. 현재 ShippingDate 필드가 문자열로 저장되어 있는 것을 확인할 수 있습니다.

{
    "_id" : ObjectId("5ca2071d66324ffac2a7dc60"),
    "CustomerName" : "Carol",
    "ShippingDate" : "2019-01-21"
}
{
    "_id" : ObjectId("5ca2073566324ffac2a7dc61"),
    "CustomerName" : "Bob",
    "ShippingDate" : "2019-02-24"
}
{
    "_id" : ObjectId("5ca2074266324ffac2a7dc62"),
    "CustomerName" : "Chris",
    "ShippingDate" : "2019-04-01"
}

3. 문자열을 날짜 타입으로 변환하기

이제 forEach()ISODate() 함수로 각 문서의 날짜 필드를 변환하고, save() 메서드로 업데이트된 문서를 다시 저장합니다.

> db.stringToDateDataTypeDemo.find().forEach(function(data){
...     data.ShippingDate = ISODate(data.ShippingDate);
...     db.stringToDateDataTypeDemo.save(data);
... });

이 스크립트는 다음과 같은 순서로 동작합니다.

  • find(): 컬렉션의 모든 문서를 가져옵니다.
  • forEach(): 각 문서를 순회하며 변환 로직을 실행합니다.
  • ISODate(): 문자열 형태의 날짜를 BSON Date 객체로 변환합니다.
  • save(): 변환된 문서를 원래 위치에 덮어써 저장합니다.

4. 변환 결과 확인하기

변환이 정상적으로 완료되었는지 확인하기 위해 문서를 다시 한번 조회해 보겠습니다.

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

실행 결과는 다음과 같습니다. ShippingDate 필드가 더 이상 문자열이 아니라 ISODate() 형식의 날짜 타입으로 변환된 것을 확인할 수 있습니다.

{
    "_id" : ObjectId("5ca2071d66324ffac2a7dc60"),
    "CustomerName" : "Carol",
    "ShippingDate" : ISODate("2019-01-21T00:00:00Z")
}
{
    "_id" : ObjectId("5ca2073566324ffac2a7dc61"),
    "CustomerName" : "Bob",
    "ShippingDate" : ISODate("2019-02-24T00:00:00Z")
}
{
    "_id" : ObjectId("5ca2074266324ffac2a7dc62"),
    "CustomerName" : "Chris",
    "ShippingDate" : ISODate("2019-04-01T00:00:00Z")
}

마무리

이처럼 MongoDB에서는 forEach()ISODate()를 조합하여 문자열로 저장된 날짜 데이터를 손쉽게 Date 타입으로 변환할 수 있습니다. 참고로 대량의 데이터를 다루는 경우에는 집계 파이프라인의 $toDate 연산자나 $convert 연산자를 활용하는 방법도 있으니, 상황에 맞게 선택하여 사용하시기 바랍니다.