[解決済み] コレクションを切り捨てる
2023-07-08 19:30:48
質問
MongoDB でコレクションを切り詰めるにはどうすればいいのでしょうか?
今、私は6つの大きなコレクションを一度に削除しなければならず、サーバーを停止し、データベースファイルを削除し、データベースとその中のコレクションを再作成しているところです。データを削除して、コレクションをそのまま残す方法はありますか? 削除操作には非常に長い時間がかかります。コレクションには何百万もの項目があります。
どのように解決するのですか?
コレクションのすべてのデータとインデックスを効率的に削除するには、次のようにします。
db.collection.drop()
. 多数のドキュメントやインデックスを持つコレクションを削除することは、 すべてのドキュメントを削除するよりも
db.collection.remove({})
. また
remove()
メソッドは、ドキュメントが削除されるとインデックスを更新するという余分な管理を行います。レプリカセット環境では、oplog が単一のコレクション削除コマンドではなく、削除された各ドキュメントのエントリを含んでいるので、さらに遅くなります。
を使用した例
mongo
シェルを使用した例です。
var dbName = 'nukeme';
db.getSiblingDB(dbName).getCollectionNames().forEach(function(collName) {
// Drop all collections except system ones (indexes/profile)
if (!collName.startsWith("system.")) {
// Safety hat
print("WARNING: going to drop ["+dbName+"."+collName+"] in 5s .. hit Ctrl-C if you've changed your mind!");
sleep(5000);
db[collName].drop();
}
})
コレクションを削除すると、設定されているストレージエンジンによって、ストレージの使用量に異なる結果が出ることは、注目に値します。
- WiredTiger (MongoDB 3.2 以降のデフォルトのストレージエンジン) は、削除が完了すると削除したコレクション (と関連するインデックス) が使っていた領域を解放します。
- MMAPv1 (MongoDB 3.0 以前のデフォルトストレージエンジン) は、ドロップしたコレクションが使っていた領域を解放します。 ではありません。 解放する 割り当て済みのディスク領域 . これは、新しいデータが挿入されたときに空き領域が再利用可能になるため、使用事例としては問題ないかもしれません。
データベースを削除する代わりに、ドキュメントが挿入されたときにコレクションが作成されるため、一般的に明示的に作成する必要はありません。
しかし、ここでは、データベースを削除して、同じコレクション名を持つ
mongo
というシェルを使用しています。
var dbName = 'nukeme';
// Save the old collection names before dropping the DB
var oldNames = db.getSiblingDB(dbName).getCollectionNames();
// Safety hat
print("WARNING: going to drop ["+dbName+"] in 5s .. hit Ctrl-C if you've changed your mind!")
sleep(5000)
db.getSiblingDB(dbName).dropDatabase();
// Recreate database with the same collection names
oldNames.forEach(function(collName) {
db.getSiblingDB(dbName).createCollection(collName);
})
関連
-
[解決済み] Mongodb find() クエリ : ユニークな値だけを返す (重複はしない) [duplicate].
-
[解決済み] mongodb シェルでドキュメントの値を印刷する
-
[解決済み] HomebrewでMongoDBをインストールする
-
[解決済み] or' 条件を含む MongoDB クエリ
-
[解決済み] Mongo で "NOT IN" クエリを実行するにはどうすればいいのですか?
-
[解決済み] pandasを使った "大量データ "ワークフロー【終了しました
-
[解決済み】MongoDBでデータのバージョニングを実装する方法
-
[解決済み】mongooseでmongoの配列にアイテムをプッシュする。
-
[解決済み] MongoDB のオブジェクトを部分的に更新して、新しいオブジェクトを既存のオブジェクトにオーバーレイ/マージするにはどうすればよいですか?
-
[解決済み] Mongo: 特定のフィールドを持たない項目を検索する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] テスト
-
[解決済み] mongodb サービスが開始されない
-
[解決済み] mongodb Failed: error connecting to db server: no reachable servers
-
[解決済み】シェルスクリプトでmongoのコマンドを実行するには?
-
[解決済み】MongoDBで、あるデータベースから別のデータベースにコレクションをコピーする方法
-
[解決済み] MongoDB SELECT COUNT GROUP BY
-
[解決済み】MongoDBで整数を挿入しようとすると、浮動小数点が挿入される。
-
[解決済み] 配列内の ObjectId の $lookup による検索
-
[解決済み] MongoDB集計フレームワーク match OR
-
[解決済み] MongoDBでObjectIDの代わりにUUIDを使用する方法