MongoDB에서 타임스탬프를 날짜로 변환

Mehvish Ashiq 2023년1월30일
  1. MongoDB에서 타임스탬프를 날짜로 변환
  2. 타임스탬프가 숫자 유형일 때 타임스탬프를 날짜로 변환
  3. 타임스탬프가 문자열 유형일 때 타임스탬프를 날짜로 변환
  4. 타임스탬프가 객체 유형일 때 타임스탬프를 날짜로 변환
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 }
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

관련 문장 - MongoDB Date