MongoDB에서 타임스탬프를 날짜로 변환
- MongoDB에서 타임스탬프를 날짜로 변환
- 타임스탬프가 숫자 유형일 때 타임스탬프를 날짜로 변환
- 타임스탬프가 문자열 유형일 때 타임스탬프를 날짜로 변환
- 타임스탬프가 객체 유형일 때 타임스탬프를 날짜로 변환
이 튜토리얼은 MongoDB에서 타임스탬프를 날짜로 변환하는 방법을 보여줍니다. 또한 특정 날짜에 대한 항목을 계산하는 방법을 보여줍니다.
MongoDB에서 타임스탬프를 날짜로 변환
timestamp에서 날짜로 변환하는 것은 타임스탬프를 저장한 유형에 따라 다릅니다. 유형 객체, 숫자 또는 문자열입니까?
mongo 쉘에서 다음 명령을 사용하여 필드 유형을 확인할 수 있습니다. 이 자습서에서는 타임스탬프가 숫자, 문자열 또는 개체 유형인 경우 날짜로 변환하는 방법을 배웁니다.
필드 유형 확인:
// MongoDB 5.0.8
> typeof db.collection_name.findOne().fieldName;
타임스탬프가 숫자 유형일 때 타임스탬프를 날짜로 변환
예제 코드(collection1
용):
// MongoDB 5.0.8
> db.collection1.insertMany([
{"_id": 1, "datetime": new Date().getTime()}, //saves timestamp in milliseconds
{"_id": 2, "datetime": new Date().getTime()},
{"_id": 3, "datetime": new Date().getTime()},
{"_id": 4, "datetime": new Date().getTime()},
{"_id": 5, "datetime": new Date().getTime()}
]);
> db.collection1.find();
출력:
{ "_id" : 1, "datetime" : 1655448286502 }
{ "_id" : 2, "datetime" : 1655448286502 }
{ "_id" : 3, "datetime" : 1655448286502 }
{ "_id" : 4, "datetime" : 1655448286502 }
{ "_id" : 5, "datetime" : 1655448286502 }
datetime
필드 유형 확인:
// MongoDB 5.0.8
> typeof db.collection1.findOne().datetime;
출력:
number
컬렉션이 준비되고 필드 유형을 알게 되면 다음 접근 방식을 사용하여 타임스탬프에서 날짜로 변환하고 날짜당 항목 수를 계산할 수 있습니다.
예제 코드(collection1
용):
// MongoDB 5.0.8
> db.collection1.aggregate([
{
"$project": {
"_id": { "$toDate": "$datetime" }
}
},
{
"$group": {
"_id": { "$dateToString": { "format": "%Y-%m-%d", "date": "$_id" }},
"count": { "$sum": 1 }
}
}
]);
출력:
{ "_id" : "2022-06-17", "count" : 5 }
여기에서 지정된 컬렉션에서 문서를 가져와서 필드의 포함, _id
필드의 억제, 새 필드의 추가 및 기존 필드의 값 재설정을 알려주는 $project
집계 단계를 사용합니다.
$project
단계 내에서 $toDate
집계를 사용하여 datetime
필드의 값을 날짜로 변환하고 _id
필드에 저장합니다. 이 필드는 $group
집계 단계로 추가로 전달됩니다.
이 단계에서 $dateToString
집계 파이프라인 연산자를 사용하여 지정된 date
개체를 지정된 형식에 따라 문자열로 변환하고 문서를 그룹화하는 데 추가로 사용되는 _id
필드에 저장합니다.
$dateToString
은 사용자 지정 형식을 고려하여 추가로 변환된 timestamp
, date
또는 ObjectId
를 사용하는 반면 $sum
은 숫자 값의 집합적 합계만 반환합니다.
마지막으로 여기에서 _id
인 항목별로 문서를 그룹화합니다. 지정된 날짜를 사용자 지정 형식에 따라 문자열로 변환했기 때문에 _id
에는 이제 문자열 값이 포함됩니다.
타임스탬프가 문자열 유형일 때 타임스탬프를 날짜로 변환
예제 코드(collection2
용):
// MongoDB 5.0.8
> db.collection2.insertMany([
{"_id": 1, "datetime": "1655445247168"},
{"_id": 2, "datetime": "1522838153324"},
{"_id": 3, "datetime": "1513421466415"},
{"_id": 4, "datetime": "1515488183153"},
{"_id": 5, "datetime": "1521571234500"}
]);
> db.collection2.find();
출력:
{ "_id" : 1, "datetime" : "1655445247168" }
{ "_id" : 2, "datetime" : "1522838153324" }
{ "_id" : 3, "datetime" : "1513421466415" }
{ "_id" : 4, "datetime" : "1515488183153" }
{ "_id" : 5, "datetime" : "1521571234500" }
datetime
필드 유형 확인:
// MongoDB 5.0.8
> typeof db.collection2.findOne().datetime;
출력:
string
이 컬렉션에는 문자열 형식의 타임스탬프가 있습니다. 따라서 다음 솔루션을 사용하여 타임스탬프에서 날짜로 변환하고 날짜별로 그룹화할 수 있습니다.
예제 코드(collection2
용):
// MongoDB 5.0.8
> db.collection2.aggregate([
{
"$project": {
"_id": { "$toDate": { "$toLong": "$datetime" }}
}
},
{
"$group": {
"_id": { "$dateToString": { "format": "%Y-%m-%d", "date": "$_id" } },
"count": { "$sum": 1 }
}
}
]);
출력:
{ "_id" : "2018-03-20", "count" : 1 }
{ "_id" : "2017-12-16", "count" : 1 }
{ "_id" : "2022-06-17", "count" : 1 }
{ "_id" : "2018-04-04", "count" : 1 }
{ "_id" : "2018-01-09", "count" : 1 }
이 코드는 한 가지 차이점을 제외하고 이전 예제와 동일합니다. 여기서는 $toLong
을 사용하여 datetime
필드를 문자열에서 숫자 유형으로 먼저 변환한 다음 변환된 값을 사용하여 $toDate
를 사용하여 날짜로 변환합니다.
타임스탬프가 객체 유형일 때 타임스탬프를 날짜로 변환
예제 코드(collection3
용):
// MongoDB 5.0.8
> db.collection3.insertMany([
{"_id":1, "datetime": new Timestamp()},
{"_id":2, "datetime": new Timestamp()},
{"_id":3, "datetime": new Timestamp()},
{"_id":4, "datetime": new Timestamp()},
{"_id":5, "datetime": new Timestamp()}
]);
> db.collection3.find();
출력:
{ "_id" : 1, "datetime" : Timestamp(1655448393, 1) }
{ "_id" : 2, "datetime" : Timestamp(1655448393, 2) }
{ "_id" : 3, "datetime" : Timestamp(1655448393, 3) }
{ "_id" : 4, "datetime" : Timestamp(1655448393, 4) }
{ "_id" : 5, "datetime" : Timestamp(1655448393, 5) }
datetime
필드 유형 확인:
// MongoDB 5.0.8
> typeof db.collection3.findOne().datetime;
출력:
object
이번에는 다음 솔루션을 사용하여 타임스탬프를 날짜로 변환하고 날짜당 항목 수를 계산할 수 있습니다.
예제 코드(collection3
용):
// MongoDB 5.0.8
> db.collection3.aggregate([
{
"$project": { "_id": "$datetime" }
},
{
"$group": {
"_id": { "$dateToString": { "format": "%Y-%m-%d", "date": "$_id" } },
"count": { "$sum": 1 }
}
}
]);
출력:
{ "_id" : "2022-06-17", "count" : 5 }