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이라는 타임스탬프 값으로 변환되었습니다. 이 방식은 날짜 데이터를 정렬, 비교 또는 외부 시스템과의 연동에 활용할 때 매우 유용합니다.