문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

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

이 페이지의 내용

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

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

참고

7 이전의 MongoDB 버전.0.3, 집계 파이프라인은 $out 를 사용하여 time series 컬렉션으로 출력할 수 없습니다. 7 이전 MongoDB 버전의 time series 컬렉션으로 데이터를 마이그레이션합니다.0.3, 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 컬렉션에 보조 인덱스 추가하기