MongoDB에서 문자열을 날짜로 변환

Bilal Shahid 2023년6월20일
  1. 문자열 또는 날짜 데이터 유형 생성
  2. MongoDB에서 문자열을 날짜로 변환
  3. toDate 연산자 사용
  4. 변환 연산자 사용
  5. dateFromString 연산자 사용
  6. set 연산자 사용
  7. ClockTime 사용
MongoDB에서 문자열을 날짜로 변환

MongoDB는 점점 인기를 얻고 있는 훌륭한 플랫폼입니다. MongoDB가 제공하는 다양한 기능 중에서 데이터를 한 유형에서 다른 유형으로 변환할 수도 있습니다.

이것은 복잡한 기능처럼 보일 수 있지만 실행하기는 매우 간단합니다.

데이터를 문자열에서 날짜로 변환하는 방법을 찾고 있다면 잘 찾아오셨습니다.

문자열 또는 날짜 데이터 유형 생성

변환이 어떻게 작동하는지 알아보기 전에 우선 문자열과 날짜가 어떻게 생성되는지 설명해야 합니다. 이상적으로는 사용자가 처음에 원하는 데이터 유형을 선택합니다.

그러나 나중에 변경하고 싶은 경우가 있을 수 있습니다. 그럼에도 불구하고 초기에 날짜 형식으로 필드를 생성할 수 있는 몇 가지 방법이 있습니다.

{
birth: new Date('Jun 23, 1912'),
}

따라서 일반 구조는 콜론과 데이터 유형이 뒤따르는 필드 이름입니다.

MongoDB에서 문자열을 날짜로 변환

MongoDB에서는 데이터 유형을 문자열에서 날짜로 전환할 수 있습니다. 예상보다 훨씬 간단합니다.

몇 줄의 코드를 추가하기만 하면 됩니다.

toDate 연산자 사용

여러 메서드 중에서 toDate 연산자는 아마도 가장 자주 사용되는 것입니다. 기억하기 쉽고 실행하기가 간단하기 때문입니다.

이 연산자는 가능한 경우 값을 날짜로 변환합니다.

그러나 이 형식으로 변경할 수 없는 경우 오류를 반환합니다. 같은 방식으로 변환할 값이 null이거나 누락된 경우 연산자는 null을 반환합니다.

MongoDB 버전이 MongoDB 4.0보다 오래된 경우 이 방법을 사용하지 못할 수 있다는 점에 유의해야 합니다. 다음은 MongoDB의 toDate 연산자를 사용하는 간단한 방법입니다.

db.collection.aggregate([
{ "$addFields": {
"created_at": {
"$toDate": "$created_at"
}
} }
])

이 코드는 필요한 날짜 형식으로 저장된 필드를 변경합니다. 위에서 지정한 대로 연산자는 오류나 누락된 데이터가 있는 경우 오류 또는 null 값을 반환합니다.

참고: 이 코드는 집계된 파이프라인 내에서 작동하도록 설계되었습니다. 단, 1개 없이 사용하도록 수정될 수 있습니다.

변환 연산자 사용

문자열을 날짜로 변환할 수 있는 또 다른 방법은 convert 연산자입니다. 이것은 값을 날짜 형식으로 변환하는 한 toDate 연산자와 유사하게 작동합니다.

convert 연산자는 많은 변환에 사용되기 때문에 다릅니다.

문자열에서 날짜로의 변환으로 제한되지 않습니다. 따라서 convert 연산자를 사용할 때 변환하려는 데이터 유형을 정의해야 합니다.

이는 종종 convert 연산자를 사용한 후 to 연산자를 사용하여 수행됩니다. 사용에 대한 더 나은 이해를 위해 아래 코드를 참조할 수 있습니다.

db.collection.aggregate([
{ "$addFields": {
"created_at": {
"$convert": {
"input": "$created_at",
"to": "date"
}
}
} }
])

이 코드는 toDate 연산자에 대해 위의 코드와 동일하게 수행됩니다. 보시다시피 convert 연산자를 지정한 후 to 연산자를 사용하여 값을 날짜 형식으로 변환하도록 지정합니다.

이 연산자는 MongoDB 4.0 및 최신 버전에서만 사용할 수 있습니다.

dateFromString 연산자 사용

이전 버전의 MongoDB가 있는 경우 항상 dateFromString 연산자를 사용하여 작업을 완료할 수 있습니다. 이는 모든 버전의 MongoDB 3.6 이상에서 작동하므로 이 연산자를 사용하려면 업데이트가 필요할 수 있습니다.

dateFromString 연산자를 사용하면 문자열을 날짜 개체로 변환할 수 있습니다. 또한 날짜 형식 및 시간대를 지정하는 옵션과 같은 몇 가지 추가 기능이 있습니다.

다음은 이 연산자를 사용할 수 있는 간단한 방법입니다.

db.collection.aggregate([
{ "$addFields": {
"created_at": {
"$dateFromString": {
"dateString": "$created_at",
"format": "%m-%d-%Y"/* this option is only available in MongoDB 4.0. or newer versions*/
}
}
} }
])

이 코드를 사용하면 원하는 변환을 수행할 수 있습니다. 또한 올바른 버전의 MongoDB가 있는 경우 format 연산자를 사용하여 날짜 형식을 변경할 수도 있습니다.

set 연산자 사용

이전 버전의 MongoDB 사용을 선호하는 경우 여전히 set 연산자를 사용하여 원하는 결과를 얻을 수 있습니다. 이것은 MongoDB 2.6과 MongoDB 3.1 사이의 모든 MongoDB 버전에서 사용할 수 있습니다.

이 연산자는 문자열을 날짜로 변환하는 데만 사용되는 것이 아닙니다. 따라서 작업을 완료하려면 몇 가지 수동 프로세스를 포함해야 합니다.

필요한 항목에 액세스하려면 forEach() 메서드 또는 cursor 메서드 next()를 사용하여 find() 메서드에서 반환된 커서를 반복해야 합니다. 이 루프 내에서 원하는 필드를 ISODATE 개체로 변환해야 합니다.

마지막으로 문자열 형식을 업데이트할 수 있도록 set 연산자를 업데이트합니다. 아래 코드에서 xyz는 날짜 형식으로 변환해야 하는 문자열이 포함된 필드입니다.

var cursor = db.collection.find({"xyz": {"$exists": true, "$type": 2 }});
while (cursor.hasNext()) {
var doc = cursor.next();
db.collection.update(
{"_id" : doc._id},
{"$set" : {"xyz" : new ISODate(doc.xyz)}}
)
};

ClockTime 사용

대부분의 경우에 작동하는 또 다른 방법은 ClockTime을 사용합니다. 이것은 본질적으로 문자열을 날짜 형식으로 변환하기 위해 find() 메서드와 결합된 ClockTime 컬렉션을 사용합니다.

사용 예는 아래 코드에 표시됩니다.

db.ClockTime.find().forEach(function(doc) {
doc.ClockInTime=new Date(doc.ClockInTime);
db.ClockTime.save(doc);
})

이제 MongoDB에서 자신에게 맞는 문자열을 날짜로 변환하는 방법을 찾을 수 있기를 바랍니다.

작가: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

관련 문장 - MongoDB Date