Docs Menu
Docs Home
/
MongoDBマニュアル
/

時系列コレクションへのデータの移行

項目一覧

  • 時系列コレクションへのデータの移行
  • (任意)データを変換してメタデータ フィールドを作成します(フィールドが存在しない場合)。 このフィールドは必須ではありません。
  • $out 集計ステージで timeseries オプションを使用する

既存のコレクションから時系列コレクションにデータを移行するには、集計パイプラインで $outステージを使用します。

注意

7.0.3より前のバージョンの MongoDB では、集計パイプラインが$outを使用して時系列コレクションに出力することはできません。 7.0.3より前のバージョンの MongoDB の時系列コレクションにデータを移行するには、 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を参照してください。 時系列オプションの詳細については、「時系列フィールド リファレンス 」を参照してください。

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セカンダリ インデックスを作成します。

Tip

以下も参照してください。

戻る

時系列コレクションへのセカンダリインデックスの追加