Time Series 컬렉션으로 데이터 마이그레이션
이 페이지의 내용
기존 컬렉션에서 time series 컬렉션으로 데이터를 마이그레이션하려면 집계 파이프라인에서 $out
단계를 사용합니다.
참고
7.0.3 이전 MongoDB 버전에서는 집계 파이프라인이 $out
를 사용하여 time series 컬렉션으로 출력할 수 없습니다. 7.0.3 이전 MongoDB 버전의 time series 컬렉션으로 데이터를 마이그레이션하려면, mongodump
및 mongorestore
을(를) 사용합니다.
Time Series 컬렉션으로 데이터 마이그레이션
(선택 사항) 메타데이터 필드가 없는 경우 데이터를 변환하여 메타데이터 필드를 만듭니다. 이 필드는 필수 입력 사항이 아닙니다.
원본 컬렉션에 메타데이터 필드가 없는 경우 $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 } }
$out 집계 단계에서 timeseries 옵션 사용
아래 예시에서는 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
에 세컨더리 인덱스를 만들어 쿼리 성능을 회복하고 로그 경고를 해결합니다.