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

MongoDB에서 날짜(Date)를 타임스탬프(Timestamp)로 변환하는 방법

MongoDB에서 저장된 날짜 값을 타임스탬프(밀리초 단위의 숫자 값)로 변환하려면 aggregate() 집계 파이프라인과 $toLong 연산자를 활용할 수 있습니다. ISODate 형식으로 저장된 날짜는 내부적으로 유닉스 에포크(Epoch) 이후 경과한 밀리초 값으로 변환됩니다.

1. 샘플 컬렉션 생성

먼저 실습에 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다.

> db.demo93.insertOne({"UserName":"Chris","ArrivalDate":new ISODate("2020-10-01")});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e2d4b6479799acab037af68")
}
> db.demo93.insertOne({"UserName":"David","ArrivalDate":new ISODate("2019-12-31")});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e2d4b7379799acab037af69")
}

2. 저장된 문서 확인하기

find() 메서드를 사용하여 컬렉션에 저장된 모든 문서를 조회합니다.

> db.demo93.find();

위 명령을 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5e2d4b6479799acab037af68"), "UserName" : "Chris", "ArrivalDate" : ISODate("2020-10-01T00:00:00Z") }
{ "_id" : ObjectId("5e2d4b7379799acab037af69"), "UserName" : "David", "ArrivalDate" : ISODate("2019-12-31T00:00:00Z") }

3. aggregate()와 $toLong으로 날짜 변환하기

다음은 MongoDB에서 날짜를 타임스탬프로 변환하는 쿼리입니다. $match 단계로 특정 문서를 필터링한 뒤, $addFields$toLong을 조합하여 ArrivalDate 필드를 밀리초 단위의 숫자 값으로 변환한 새로운 timestamp 필드를 추가합니다.

> db.demo93.aggregate([
...     { "$match": { "UserName": "Chris" }},
...     { "$addFields": {
...         "timestamp": { "$toLong": "$ArrivalDate" }
...     }}
... ]);

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

{ "_id" : ObjectId("5e2d4b6479799acab037af68"), "UserName" : "Chris", "ArrivalDate" : ISODate("2020-10-01T00:00:00Z"), "timestamp" : NumberLong("1601510400000") }

핵심 정리

$toLong 연산자는 Date 타입 값을 에포크(1970년 1월 1일 UTC) 이후 경과한 밀리초를 나타내는 64비트 정수(NumberLong)로 변환합니다. 예제 결과에서 볼 수 있듯이 2020-10-01 00:00:00 UTC는 1601510400000이라는 타임스탬프 값으로 변환되었습니다. 이 방식은 날짜 데이터를 정렬, 비교 또는 외부 시스템과의 연동에 활용할 때 매우 유용합니다.