Docs Menu
Docs Home
/
MongoDB 매뉴얼
/

Time Series 컬렉션으로 데이터 마이그레이션

이 페이지의 내용

  • Time Series 컬렉션으로 데이터 마이그레이션
  • (선택 사항) 메타데이터 필드가 없는 경우 데이터를 변환하여 메타데이터 필드를 만듭니다. 이 필드는 필수 입력 사항이 아닙니다.
  • $out 집계 단계에서 timeseries 옵션 사용

기존 컬렉션에서 time series 컬렉션으로 데이터를 마이그레이션하려면 집계 파이프라인에서 $out 단계를 사용합니다.

참고

7.0.3 이전 MongoDB 버전에서는 집계 파이프라인이 $out 를 사용하여 time series 컬렉션으로 출력할 수 없습니다. 7.0.3 이전 MongoDB 버전의 time series 컬렉션으로 데이터를 마이그레이션하려면, mongodumpmongorestore 을(를) 사용합니다.

1

원본 컬렉션에 메타데이터 필드가 없는 경우 $addFields 집계 단계를 사용하여 추가합니다.

형식을 사용하는 날씨 데이터가 포함된 컬렉션을 예로 들어 보겠습니다.

{
"_id" : ObjectId("5553a998e4b02cf7151190b8"),
"st" : "x+47600-047900",
"ts" : ISODate("1984-03-05T13:00:00Z"),
"position" : {
"type" : "Point",
"coordinates" : [ -47.9, 47.6 ]
},
"elevation" : 9999,
"callLetters" : "VCSZ",
"qualityControlProcess" : "V020",
"dataSource" : "4",
"type" : "FM-13",
"airTemperature" : { "value" : -3.1, "quality" : "1" },
"dewPoint" : { "value" : 999.9, "quality" : "9" },
"pressure" : { "value" : 1015.3, "quality" : "1" },
"wind" : {
"direction" : { "angle" : 999, "quality" : "9" },
"type" : "9",
"speed" : { "rate" : 999.9, "quality" : "9" }
},
"visibility" : {
"distance" : { "value" : 999999, "quality" : "9" },
"variability" : { "value" : "N", "quality" : "9" }
},
"skyCondition" : {
"ceilingHeight" : { "value" : 99999, "quality" : "9", "determination" : "9" },
"cavok" : "N"
},
"sections" : [ "AG1" ],
"precipitationEstimatedObservation" : { "discrepancy" : "2",
"estimatedWaterDepth" : 999 }
}

다음 파이프라인 단계에서는 metaData 필드를 추가하고 $project를 사용하여 문서에서 나머지 필드를 포함하거나 제외합니다.

{ $addFields: {
metaData: {
"st": "$st",
"position": "$position",
"elevation": "$elevation",
"callLetters": "$callLetters",
"qualityControlProcess": "$qualityControlProcess",
"type": "$type"
}
},
},
{ $project: {
_id: 1,
ts: 1,
metaData: 1,
dataSource: 1,
airTemperature: 1,
dewPoint: 1,
pressure: 1,
wind: 1,
visibility: 1,
skyCondition: 1,
sections: 1,
precipitationEstimatedObservation: 1
}
}
2

아래 예시에서는 db.collection.aggregate() 헬퍼 메서드를 사용합니다. 집계 단계 구문은 $out을 참조하세요. time series 옵션에 대한 전체 설명은 time series 필드 참조를 참조하세요.

db.weather_data.aggregate([
{
$addFields: {
metaData: {
"st": "$st",
"position": "$position",
"elevation": "$elevation",
"callLetters": "$callLetters",
"qualityControlProcess": "$qualityControlProcess",
"type": "$type"
}
},
}, {
$project: {
_id: 1,
ts: 1,
metaData: 1,
dataSource: 1,
airTemperature: 1,
dewPoint: 1,
pressure: 1,
wind: 1,
visibility: 1,
skyCondition: 1,
sections: 1,
precipitationEstimatedObservation: 1
}
}, {
$out: {
db: "mydatabase",
coll: "weathernew",
timeseries: {
timeField: "ts",
metaField: "metaData"
}
}
}
])

이 명령을 실행하면 아래에 weathernew 컬렉션이 표시됩니다.

db.weathernew.findOne()
{
"_id" : ObjectId("5553a998e4b02cf7151190b8"),
"ts" : ISODate("1984-03-05T13:00:00Z"),
"metaData" : {
"st" : "x+47600-047900",
"position" : {
"type" : "Point",
"coordinates" : [ -47.9, 47.6 ]
},
"elevation" : 9999,
"callLetters" : "VCSZ",
"qualityControlProcess" : "V020",
"type" : "FM-13"
},
"dataSource" : "4",
"airTemperature" : { "value" : -3.1, "quality" : "1" },
"dewPoint" : { "value" : 999.9, "quality" : "9" },
"pressure" : { "value" : 1015.3, "quality" : "1" },
"wind" : {
"direction" : { "angle" : 999, "quality" : "9" },
"type" : "9",
"speed" : { "rate" : 999.9, "quality" : "9" }
},
"visibility" : {
"distance" : { "value" : 999999, "quality" : "9" },
"variability" : { "value" : "N", "quality" : "9" }
},
"skyCondition" : {
"ceilingHeight" : { "value" : 99999, "quality" : "9", "determination" : "9" },
"cavok" : "N"
},
"sections" : [ "AG1" ],
"precipitationEstimatedObservation" : { "discrepancy" : "2", "estimatedWaterDepth" : 999 }
}

원래 컬렉션에 세컨더리 인덱스가 있는 경우 지금 수동으로 다시 생성합니다. 컬렉션에 1970-01-01T00:00:00.000Z 이전 또는 2038-01-19T03:14:07.000Z 이후의 timeField 값이 포함되어 있는 경우, MongoDB는 경고를 기록하고 내부 클러스터 인덱스를 사용하는 일부 쿼리 최적화를 비활성화합니다. timeField세컨더리 인덱스를 만들어 쿼리 성능을 회복하고 로그 경고를 해결합니다.

다음도 참조하세요.

돌아가기

Time Series 컬렉션에 보조 인덱스 추가하기