web-dev-qa-db-ja.com

mongodumpは指定されたコレクションを無視します

製品サーバーでmongoデータベースをバックアップしてから、ステージングサーバーに復元してから復元しようとしました。ここにいくつかの問題があります。dbには多くのコレクションがあります。ステージングサーバーで復元したくないコレクションを無視したいです。

ステージングデータベースをダンプし、製品データベースをダンプしてから-dropオプションを使用して製品をステージングに復元することで、これにアプローチできます。ステージングデータベースの指定されたコレクションを復元します。ええと、それは本当に悪いです。

1。生産データベースのダンプ

mongodump --Host product-server-Host --username abcd --password bcda -d db -o pruduct-dump-dir

2。ステージングデータベースのダンプ

mongodump --Host staging-server-Host --username abcd --password bcda -d db -o staging -dump-dir

。すべてのコレクションを復元してからコレクションを復元する pruduct-dump-dirをステージングサーバーに復元する

mongorestore --Host staging-server-Host --username abcd --password bcda --drop pruduct-dump-dir

mongorestore --Host staging-server-Host --username abcd --password bcda --drop --collection coll pruducting-dump-dir

ダンプするときにignore-collectionなどのオプションはありますか?どんな提案も歓迎されます:3

33
sashimi

バージョン3.0.0から利用可能になりました

--excludeCollection <collection_name>
--excludeCollectionsWithPrefix <collection_prefix>

繰り返して1つ以上を除外します

チェックアウト ドキュメント

61

あなたは付け加えられます --collection COLLECTION_NAME必要なコレクションをダンプします。デフォルトでは、データベースからダンプするコレクションを指定しない場合、 MongoDump はそのデータベース内のすべてのコレクションをダンプします。

6
Nick

Mongo 3.4では、Mongoデータベースダンプから復元するときに--nsExclude <namespace pattern>オプションを指定できるようになりました。これにより、指定したネームスペースが復元操作から除外されます。これは、mongodump操作が既に発生している場合に特に便利です。

公式ドキュメント: https://docs.mongodb.com/manual/reference/program/mongorestore/#cmdoption-nsexclude

ワイルドカードを使用して複数のコレクションを除外できます。

mongorestore --db test --nsExclude 'test.*_tmp'

または、複数の--nsExcludeオプションを指定しても同様に機能します。

mongorestore --db test --nsExclude 'test.collection1' --nsExclude 'test.collection2'
2
David
mongodump --db test --excludeCollection=users --excludeCollection=salaries
2
Nataniel Paiva

Mongo dbのバックアップ中も同じことをしなければなりませんでした。 python(または他の言語))を使用する場合、同様のアプローチを使用できます。mongodumpを実行した後、不要なコレクションのbsonおよびmetadata.jsonファイルを簡単に削除する必要があります。

    import os
    EXCLUDE_COLLECTIONS = ['collection_1', 'collection_2']
    db_dump_path = "/Path/to/mongodump"
    db_name = "name_of_db"
    for collection_name in EXCLUDE_COLLECTIONS:
        bson_file_path = os.path.join(db_dump_path, db_name, '{}.bson'.format(collection_name)
        meta_file_path = os.path.join(db_dump_path, db_name, '{}.metadata.json'.format(collection_name)
        if os.path.exists(bson_file_path) and os.path.exists(meta_file_path):
            os.remove(bson_file_path)
            os.remove(meta_file_path)
0