コレクションにしたいMongoDBデータベースのビューがある場合は、適切な場所にいます。
以下は、MongoDBでビューをコレクションに変換する例です。
例
この例は、MongoDBデータベースツールのmongodumpを使用してビューをコレクションに変換する方法を示しています。 およびmongorestore 。
これらのツールをインストールしていない場合は、MongoDBインストールガイドを参照してください。
ビューを見つける
まず、現在のデータベースのビューとコレクションを見てみましょう。
show collections 結果:
employees owners pets system.views v_pettypes
この場合、v_pettypes 実際にはビューです。
次のクエリでビューであることを確認できます:
db.getCollectionInfos( { "name": "v_pettypes"} ) 結果:
[
{
"name" : "v_pettypes",
"type" : "view",
"options" : {
"viewOn" : "pets",
"pipeline" : [
{
"$group" : {
"_id" : "$type"
}
}
]
},
"info" : {
"readOnly" : true
}
}
]
typeであるため、ビューであることがわかります フィールドの値はview 。
ビューをコレクションに変換
これで、先に進んでそのビューをコレクションに変換できます。これは、MongoDBデータベースツールのmongodumpを使用して実行できます。 およびmongorestore 。
mongodumpを使用します ビューをエクスポートするには、mongorestore それを復元します。具体的には、mongodumpをパイプ処理します ストリームをmongorestoreに出力します 。そうすれば、すべてを一度に行うことができます。
コードは次のとおりです:
mongodump --archive --db=PetHotel --collection=v_pettypes --viewsAsCollections | mongorestore --archive --nsFrom='PetHotel.v_pettypes' --nsTo='PetHotel.pettypes'
そのコードは、システムのコマンドライン(新しいターミナルやコマンドプロンプトウィンドウなど)から実行する必要があります。 mongoから実行しないでください シェル。
そのコードを実行すると、v_pettypesが変換されました pettypesというコレクションを表示します 同じデータベース内。
厳密に言えば、実際には変換しませんでした コレクションへのビュー。 --viewsAsCollectionsを使用しただけです ビューをコレクションとしてダンプする引数を指定してから、そのコレクションをデータベースに復元しました。したがって、元のビューはまだ存在します。
ビューをコレクションとしてエクスポートする場合、mongodump ビュー内のドキュメントを含むBSONファイルを生成します。 mongorestoreを使用する場合 生成されたBSONファイルを復元するには、ビューがコレクションとして復元されます。
--viewsAsCollectionsを使用せずに 引数、mongodump 各ビューのメタデータをエクスポートします。ビューのメタデータファイルをmongorestoreに含める場合 操作すると、ビューが再作成されます。
--viewsAsCollectionsを使用する また、すべての標準コレクションを省略します。
結果を確認する
ビューとコレクションをもう一度見てみましょう。
show collections 結果:
employees owners pets pettypes system.views v_pettypes
したがって、pettypesという新しいコレクションが表示されます。 存在し、元のビューはまだ存在します。
pettypesであることを確認できます 次のようなコレクション(ビューではありません)です:
db.getCollectionInfos( { "name": "pettypes"} ) 結果:
[
{
"name" : "pettypes",
"type" : "collection",
"options" : {
},
"info" : {
"readOnly" : false,
"uuid" : UUID("d183c7e4-44bc-4656-b272-7ad707f8dc62")
},
"idIndex" : {
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
}
}
]
type フィールドにcollectionの値が含まれています 、つまりコレクションです。
元のビューを削除
この段階で、元のビューを削除するか、そのままにしておくかを選択できます。
次のようにドロップできます:
db.v_pettypes.drop() コレクションを確認すると、元のビューがなくなり、新しいコレクションが残っていることがわかります。
show collections 結果:
employees owners pets pettypes system.views