sql >> データベース >  >> NoSQL >> MongoDB

MongoDBビューをコレクションに変換する方法

    コレクションにしたい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

    1. $graphLookupを使用したMongoでの階層クエリ

    2. マングーススキーマ参照と未定義のタイプ'ObjectID'

    3. redisはmysqlを完全に置き換えることができますか?

    4. DBとredisキャッシュ間でデータを同期するための最良の戦略は何ですか