13

データベースを少し再構築したので、特定のコレクションは必要なくなりました。ただし、手作業で削除するには多すぎます(実際には数千)。問題の各コレクションは「cache_」で始まり、完全にクリーンアップされていることを確認したいいくつかのインデックスが含まれています。

すべてのコレクション名をループし、「cache_」で始まるコレクションを削除するために、mongoシェルを使用する方法を理解しようとしています。Queries &Cursorsのドキュメントによると、コレクション内のドキュメントをループする方法は理解していますが、MongoDBシェルを使用してデータベース内のコレクションをループする方法は理解していません。

擬似コードでは、これが私に必要なものです。

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

FWIW、「コレクション名を介したmongodbループ」などを検索しましたが、何も見つかりませんでしたが、おそらくgooglez=Pでsuxします。

関連する注意点として...この程度の再構築を行った後db.repairDatabase()、削除されたインデックスなどがすべてきれいできれいであることを確認するために、何かを行う必要がありますか?

ありがとう。

4

3 に答える 3

28

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()
    }
}
于 2012-10-11T16:52:53.380 に答える
1

mongodbメーリングリストにある別の回答を追加するだけです

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

上にリストしたように、local / config/adminデータベースを削除したくない場合があります。

于 2013-02-15T09:22:40.477 に答える
0

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

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

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

于 2013-09-06T21:27:07.777 に答える