Docs Menu
Docs Home
/
데이터베이스 매뉴얼
/ / /

집계 파이프라인을 사용하여 Time Series 컬렉션으로 데이터 마이그레이션

MongoDB 버전 7.0부터 $out 집계 단계를 사용하여 기존 컬렉션의 데이터를 Time Series 컬렉션으로 마이그레이션할 수 있습니다.

참고

MongoDB는 $out 을 사용하여 데이터를 Time Series 컬렉션으로 마이그레이션할 때 출력 순서를 보장하지 않습니다. 순서를 유지하려면 집계 파이프라인을 사용하여 마이그레이션하기 전에 데이터를 정렬하세요.

시간 및 메타데이터 정보를 포함하는 weatherdata 컬렉션을 고려해 보세요.

db.weatherdata.insertOne(
{
_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
}
}
)
1

컬렉션에 각 시리즈를 식별할 수 있는 필드가 포함되어 있지 않으면 데이터를 변환하여 필드를 정의하세요. 이 예시에서 metaData 필드는 사용자가 만든 Time Series 컬렉션의 metaField가 됩니다.

참고

Time Series metaFieldgrandularity로 적절한 필드를 선택하면 저장과 쿼리 성능을 모두 최적화할 수 있습니다. 필드 선택과 모범 사례에 대한 자세한 정보는 metaField 및 세분성 모범 사례를 참조하세요.

아래 파이프라인은 다음 작업을 수행합니다.

  • $addFields를 사용하여 weather_data 컬렉션에 metaData 필드를 추가합니다.

  • $project를 사용하여 문서의 나머지 필드를 포함하거나 제외합니다.

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
}
}
])
2

파이프라인에 $out 집계 단계를 추가하여 Time Series 컬렉션을 생성하고 데이터를 삽입합니다. 아래 파이프라인은 다음 작업을 수행합니다.

  • timeseries 옵션과 $out을 함께 사용하여 mydatabase 데이터베이스에 weathernew Time Series 컬렉션을 생성합니다.

  • metaData 필드를 weathernew 컬렉션의 metaField로 정의합니다.

  • ts 필드를 weathernew 컬렉션의 timeField로 정의합니다.

    참고

    Time Series 컬렉션의 timeField날짜 유형이어야 합니다.

{
$out: {
db: "mydatabase",
coll: "weathernew",
timeseries: {
timeField: "ts",
metaField: "metaData",
granularity: "seconds"
}
}
}

집계 단계 구문은 $out을 참조하세요. time series 옵션에 대한 전체 설명은 time series 필드 참조를 참조하세요.

3

이 집계 파이프라인을 실행한 후 findOne()을 사용하여 weathernew Time Series 컬렉션의 문서를 볼 수 있습니다.

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 }
}

원래 컬렉션에 세컨더리 인덱스가 있는 경우 지금 수동으로 다시 생성합니다.

Time Series 컬렉션에 1970-01-01T00:00:00.000Z 이전 또는 2038-01-19T03:14:07.000Z 이후의 timeField 값이 포함되어 있는 경우 MongoDB는 경고를 기록하고 내부 클러스터형 인덱스를 활용하는 일부 쿼리 최적화를 비활성화합니다. 쿼리 성능을 회복하고 로그 경고를 해결하려면 timeField보조 인덱스를 생성하세요.

돌아가기

데이터 마이그레이션

이 페이지의 내용