2012-06-26 3 views
12

私のデータベースには、削除が必要なmongodbコレクションがたくさんあります。それらはすべて似た名前を持ち、ワイルドカード文字だけを使用できる場合は簡単に削除できます。しかし、彼らはできるように見えません。一度にたくさんのmongodbコレクションを削除するには?

複数のコレクションを一度に選択して削除する方法はありますか?

答えて

6

いいえ、いくつかのコレクションをワイルドカード/正規表現で削除する方法はありません。あなたはそれらを一つずつ落とす必要があります。私は最近同様の作業を行い、スクリプトは毎秒20〜30件のコレクションを削除することができました。いくつ持っていますか?

5

すべてのコレクションを削除するには、次のコマンドを使用します。正規表現については

> use database_name; 

> db.getCollectionNames().forEach(function(c) { 
    if(c != 'system.indexes') { 
     db.getCollection(c).drop(); 
    } 
    }); 
+1

これはまだ1つ1つで、正規表現はありません:) –

17

あなたはモンゴシェルでdb.dropDatabase()と、データベース内のすべてのコレクションをドロップすることができstring.match

db.getCollectionNames().forEach(function(c) { 
    if(!c.match("^system.indexes")) { 
     db.getCollection(c).drop(); 
    } 
    }); 
+2

あなたの正規表現をチェックしてください。あなたの例は 'system.indexes'コレクションを削除します。私はあなたが 'system.indexes'以外のすべてを落とそうとしていると仮定しています。 – wyattisimo

+0

@wyattisimoあなたが正しいです、正規表現は 'system.indexes'にマッチします。そうしたいのは、' system.indexes'以外のすべてを削除することです。ありがとう! コードを修正しました。 –

3

を使用することができます。あなたがする前にあなたが本当にすべてを傷つけたいと確かめてください。

3
# Delete Particular Collections From MongoDB 

> use database_name 

> delete_collection_list = ["collection1", "collection2", "collection3", "collection4", "collection5", "collection6"] 

> delete_collection_list.forEach(function (collection) { 
    if (db.getCollectionNames().indexOf(collection)>=0) { 
     db[collection].drop(); 
     print("Deleted Collection: "+ collection); 
    } 
    }) 
関連する問題