2012-10-11 6 views
8

データベースを少し再構成しましたが、特定のコレクションが不要になりました。しかし、手で取り除くにはあまりにも多くの人がいる(実際には何千人も)。問題のコレクションはそれぞれ「cache_」で始まり、完全にクリーンアップされていることを確認したいいくつかのインデックスが含まれています。MongoDB:名前が文字列と一致するすべてのコレクションを削除します。

すべてのコレクション名をループし、 "cache_"で始まるコレクションを削除するには、mongoシェルを使用する方法を理解しようとしています。 Queries & Cursors documentationでは、コレクション内の文書をループする方法を理解していますが、MongoDBシェルを使用してデータベース内のコレクションをループする方法については理解していません。擬似コードで

が、これは私が必要なものである:

var all_collections = show collections 
for(var collection in all_collections) 
    if(collection.name.indexOf('cache_')==0) 
     collection.drop() 

FWIW、私は等「コレクション名を通じてMongoDBのループ」の検索やったと何も見つかっていないが、多分私はでSUX teh googlez = P

関連するメモ...この程度のリストラを行った後、削除されたインデックスなどがすべてきれいできれいであることを確認するために、私はdb.repairDatabase()などの処理を行うべきですか?

ありがとうございました。

答えて

20

db.getCollectionNames()を使用してすべてのコレクションを取得し、配列に格納します。ただ、別の答えを追加する

var collectionNames = db.getCollectionNames(); 
for(var i = 0, len = collectionNames.length; i < len ; i++){ 
    var collectionName = collectionNames[i]; 
    if(collectionName.indexOf('cache_') == 0){ 
     db[collectionName].drop() 
    } 
} 
+1

FTW、ありがとう。私は、 "show collection" => "db.getCollectionNames();"ということを知らなかったと思います。 –

+0

** db [collectionName] **はここのキーです。 _JavascriptがRoboMongo_ 'VARコレクション= [ 'collection1'、 'コレクション2'] collections.forEach(関数(coll_name){ プリント(coll_name) DB [coll_name] .drop() })' – Abhijeet

1

はおそらく、私が上に挙げたてきたようにローカル/設定/管理DBSをドロップしないようにしたいon mongodb mailing list

db.adminCommand("listDatabases").databases.forEach(function (d) { 
    if (d.name != "local" && d.name != "admin" && d.name != "config") 
    db.getSiblingDB(d.name).dropDatabase(); 
}) 

を見つけました。

+0

I上で実行します'toto'を使い、次に' db.getSiblingDB( "mydb")。dropDatabase(); 'thx – Maxence

0

以下は、マップリダクションジョブによって作成されたコレクションを削除するのに役立ちました。私の場合は、ローカルセットアップで自動的に削除されましたが、何らかの理由でサーバー上で動かなくなりました。

db.getCollectionNames().forEach(function (d) { 
    if (d != "collectionICareAbout" && d != "system.indexes" && d != "system.users") { 
     print("dropping: " + d); 
     db[d].drop(); 
    } 
}) 

これはNishantの回答に似ていますが、違いは、私が管理者権限を持っていないとdb.adminCommand(ホストされたMongoのインスタンス)を呼び出すことはできませんです。

関連する問題