MongoDBで名前に特定の文字列が一致するコレクションをすべて一括削除する方法
MongoDBで、名前に特定の文字列が含まれるコレクションをすべて削除したい場合は、forループですべてのコレクション名を反復処理し、対象の文字列に一致するコレクションを見つけたうえで、drop()メソッドを実行することで実現できます。この記事では、具体的な手順をサンプルコードとともに解説します。
サンプルデータベースの確認
ここでは、「sample」というデータベースを使用します。まず、現在存在するコレクションの一覧を確認しましょう。以下のコマンドを実行します。
> show collections;
実行すると、次のようなコレクション一覧が出力されます。
arraySizeErrorDemo
basicInformationDemo
copyThisCollectionToSampleDatabaseDemo
deleteAllRecordsDemo
deleteDocuments
deleteDocumentsDemo
deleteMultipleIdsDemo
deleteSomeInformation
documentWithAParticularFieldValueDemo
employee
findListOfIdsDemo
findMimimumElementInArrayDemo
findSubstring
getAllRecordsFromSourceCollectionDemo
getElementWithMaxIdDemo
insertDocumentWithDateDemo
internalArraySizeDemo
largestDocumentDemo
makingStudentInformationClone
oppositeAddToSetDemo
prettyDemo
returnOnlyUniqueValuesDemo
selectWhereInDemo
sourceCollection
studentInformation
sumOfValueDemo
sumTwoFieldsDemo
truncateDemo
updateInformation
userInformation
「delete」で始まるコレクションを一括削除するクエリ
次に、名前が「delete」という文字列で始まるコレクションをすべて削除します。以下のクエリを実行してください。
> var allCollectionName = db.getCollectionNames();
> for(var j= 0, colLength = allCollectionName.length; j< colLength ; j++){
... var colName = allCollectionName[j];
... if(colName.indexOf('delete') == 0){
... db[colName].drop()
... }
...}
クエリの仕組み
まず、db.getCollectionNames()メソッドでデータベース内のすべてのコレクション名を配列として取得します。次に、forループで各コレクション名を順番にチェックし、indexOf('delete') == 0 という条件によって、名前が「delete」で始まるかどうかを判定します。条件に一致したコレクションに対してのみ、db[colName].drop() を呼び出して削除を実行します。
実行結果は次のとおりです。
True
削除後の確認
これで、「delete」で始まる名前のコレクションはすべて削除されました。実際にコレクション一覧を再度表示して確認してみましょう。
> show collections;
実行すると、次のように「deleteAllRecordsDemo」「deleteDocuments」「deleteDocumentsDemo」「deleteMultipleIdsDemo」「deleteSomeInformation」が一覧から消えていることがわかります。
arraySizeErrorDemo
basicInformationDemo
copyThisCollectionToSampleDatabaseDemo
documentWithAParticularFieldValueDemo
employee
findListOfIdsDemo
findMimimumElementInArrayDemo
findSubstring
getAllRecordsFromSourceCollectionDemo
getElementWithMaxIdDemo
insertDocumentWithDateDemo
internalArraySizeDemo
largestDocumentDemo
makingStudentInformationClone
oppositeAddToSetDemo
prettyDemo
returnOnlyUniqueValuesDemo
selectWhereInDemo
sourceCollection
studentInformation
sumOfValueDemo
sumTwoFieldsDemo
truncateDemo
updateInformation
userInformation
実行時の注意点
なお、上記のサンプルでは indexOf() の戻り値が 0 の場合、つまりコレクション名が「delete」で始まるものだけを削除対象としています。もし名前の途中に文字列を含むコレクションもまとめて削除したい場合は、条件を indexOf('delete') != -1 のように変更してください。また、drop() で削除したコレクションは元に戻せないため、本番環境で実行する前には必ず対象コレクションをよく確認するか、事前にバックアップを取得しておくことをおすすめします。
-
MongoDBで文字列比較を実装する方法|$strcasecmp演算子の使い方を解説
MongoDBにおける文字列比較の基本MongoDBで文字列比較を実装するには、集計パイプライン(aggregation pipeline)内で $strcasecmp 演算子を使用します。この演算子は、2つの文字列を大文字と小文字を区別せずに比較し、以下のいずれかの値を返します。1 — 第1引数の文字列が第2引数の文字列より「大きい」場合0 — 2つの文字列が等しい場合-1 — 第1引数の文字列が第2引数の文字列より「小さい」場合それでは、実際にドキュメントを含むコレクションを作成して、動作を確認してみましょう。サンプルコレクションの作成まず、insertOne() メソッドを使ってドキュメ
-
MongoDBで特定の文字列を使ってフィールドのすべての値を一括更新する方法
MongoDBでフィールドのすべての値を一括更新する方法MongoDBのコレクション内に存在するすべてのドキュメントの特定フィールドを、同じ文字列でまとめて更新したい場合があります。そのようなときは、update()メソッドにオプション「multi: true」を指定します。この記事では、実際のコマンド例をもとに、手順をわかりやすく解説します。1. サンプルコレクションの作成まずはinsertOne()メソッドを使って、テスト用コレクション「demo720」に複数のドキュメントを挿入します。> db.demo720.insertOne({SubjectName:MySQL}); {