MongoDB データの削除

MongoDBBeginner
オンラインで実践に進む

はじめに

この実験 (Lab) では、MongoDB データベース内のデータを効果的に削除する方法を学びます。まず単一のドキュメントを削除し、次にバルク削除や特定の条件に基づいたデータ削除のテクニックを探求します。最後に、コレクション全体をクリアする方法と削除結果を確認する方法を学びます。これらのスキルは、MongoDB データベースの管理とデータ整合性の維持に不可欠です。

この実験では、以下のトピックを扱います。deleteOne() を使用した単一ドキュメントの削除、deleteMany() を使用した複数ドキュメントの削除、条件付き削除のためのクエリ演算子の使用、そして deleteMany({}) または drop() を使用したコレクションのクリアです。この実験の終わりには、さまざまな方法で MongoDB のデータを削除する方法について、確かな理解が得られるでしょう。

単一ドキュメントの削除

このステップでは、MongoDB コレクションから単一のドキュメントを削除する方法を学びます。まず、MongoDB シェルに接続し、サンプルデータを準備する必要があります。

ターミナルで以下のコマンドを実行して、MongoDB シェルを起動します。

mongosh

シェルに入ったら、新しいデータベースといくつかのドキュメントを含むコレクションを作成します。

use mylab_database

いくつかのドキュメントを含む新しいコレクションを作成します。

db.users.insertMany([
  { name: "John Doe", age: 30, email: "john@example.com" },
  { name: "Jane Smith", age: 25, email: "jane@example.com" },
  { name: "Bob Johnson", age: 35, email: "bob@example.com" }
]);

出力は、3 つのドキュメントが挿入されたことを確認します。

{
  "acknowledged": true,
  "insertedIds": {
    "0": ObjectId("..."),
    "1": ObjectId("..."),
    "2": ObjectId("...")
  }
}

次に、単一のドキュメントを削除するには、deleteOne() メソッドを使用します。このメソッドは、指定されたフィルターに一致する最初のドキュメントを見つけて削除します。「Jane Smith」のドキュメントを削除しましょう。

db.users.deleteOne({ name: "Jane Smith" });

出力は、1 つのドキュメントが正常に削除されたことを示します。

{ "acknowledged": true, "deletedCount": 1 }
  • deleteOne(): このメソッドは、フィルター条件に一致する最初のドキュメントのみを削除します。
  • { name: "Jane Smith" }: これは削除するドキュメントを指定するフィルターです。
  • deletedCount: 1: これは 1 つのドキュメントが削除されたことを確認します。

ドキュメントが削除されたことを確認するには、users コレクション内の残りのすべてのドキュメントを一覧表示できます。

db.users.find();

出力には 2 つのドキュメントのみが表示され、「Jane Smith」が削除されたことが確認できます。

複数ドキュメントの削除

前のステップでは単一のドキュメントを削除しました。ここでは、deleteMany() メソッドを使用して一度に複数のドキュメントを削除する方法を学びます。これは、特定のステータスを持つレコードのクリーンアップなど、バルク削除操作に役立ちます。

まず、users コレクションに新しいドキュメントをいくつか追加しましょう。これらのドキュメントには status フィールドがあり、これをバルク削除操作に使用します。

db.users.insertMany([
  { name: "Alice Wilson", age: 28, status: "inactive" },
  { name: "Charlie Brown", age: 40, status: "inactive" },
  { name: "David Lee", age: 35, status: "active" },
  { name: "Eve Taylor", age: 45, status: "inactive" }
]);

出力は、4 つの新しいドキュメントの挿入を確認します。

{
  "acknowledged": true,
  "insertedIds": {
    "0": ObjectId("..."),
    "1": ObjectId("..."),
    "2": ObjectId("..."),
    "3": ObjectId("...")
  }
}

次に、deleteMany() メソッドを使用して、ステータスが "inactive" であるすべてのユーザーを削除します。

db.users.deleteMany({ status: "inactive" });

出力は、3 つのドキュメントが削除されたことを示します。

{ "acknowledged": true, "deletedCount": 3 }
  • deleteMany(): このメソッドは、フィルター条件に一致するすべてのドキュメントを削除します。
  • { status: "inactive" }: このフィルターは、status フィールドが "inactive" であるすべてのドキュメントを対象とします。

バルク削除を確認するには、コレクションに残っているすべてのドキュメントを一覧表示します。

db.users.find();

出力には "inactive" でないドキュメントのみが表示され、バルク削除が成功したことを示します。

条件を使用したドキュメントの削除

MongoDB では、強力なクエリ演算子を使用して、より複雑な条件に基づいてドキュメントを削除できます。このステップでは、$gt (より大きい) や $lt (より小さい) のような演算子を使用して条件付き削除を実行する方法を学びます。

まず、employees という名前の新しいコレクションにサンプルデータを作成しましょう。

db.employees.insertMany([
  { name: "John Doe", age: 25, department: "Sales", salary: 50000 },
  { name: "Jane Smith", age: 35, department: "Marketing", salary: 60000 },
  { name: "Bob Johnson", age: 45, department: "Sales", salary: 55000 },
  { name: "Alice Brown", age: 30, department: "HR", salary: 52000 }
]);

出力は、4 つのドキュメントの挿入を確認します。

{
  "acknowledged": true,
  "insertedIds": {
    "0": ObjectId("..."),
    "1": ObjectId("..."),
    "2": ObjectId("..."),
    "3": ObjectId("...")
  }
}

次に、条件付き削除を実行しましょう。40 歳を超えるすべての従業員を削除します。

db.employees.deleteMany({ age: { $gt: 40 } });

出力は、1 つのドキュメントが削除されたことを示します。

{ "acknowledged": true, "deletedCount": 1 }
  • { age: { $gt: 40 } }: このフィルターは $gt 演算子を使用して、age フィールドが 40 より大きいドキュメントを選択します。

次に、複数の条件に基づいて削除を実行しましょう。「Sales」部門で給与が 55,000 未満の従業員を削除します。

db.employees.deleteMany({
  department: "Sales",
  salary: { $lt: 55000 }
});

出力は、別のドキュメントが削除されたことを確認します。

{ "acknowledged": true, "deletedCount": 1 }
  • このコマンドは 2 つの条件を組み合わせています。department は "Sales" でなければならず、salary は 55,000 未満 ( $lt 演算子を使用) でなければなりません。

結果を確認するには、employees コレクションに残っているドキュメントを表示します。

db.employees.find();

出力には、削除基準を満たさなかった 2 人の従業員のみが表示されます。

コレクションからすべてのデータをクリアする

コレクションからすべてのドキュメントを削除する必要がある場合があります。MongoDB では、これを行うための 2 つの主な方法があります。deleteMany({}) を使用してすべてのドキュメントを削除するか、drop() を使用してコレクション全体を削除します。

まず、サンプルデータを含む新しい products コレクションを作成しましょう。

db.products.insertMany([
  { name: "Laptop", price: 1000, category: "Electronics" },
  { name: "Smartphone", price: 500, category: "Electronics" },
  { name: "Headphones", price: 100, category: "Electronics" }
]);

方法 1: deleteMany() を使用してすべてのドキュメントを削除する

deleteMany() メソッドに空のフィルター {} を渡すことで、コレクションからすべてのドキュメントを削除できます。このアプローチはデータを削除しますが、インデックスを含むコレクション自体は保持されます。

db.products.deleteMany({});

出力は、3 つすべてのドキュメントが削除されたことを示します。

{ "acknowledged": true, "deletedCount": 3 }

find() クエリを実行して、コレクションが空になったことを確認できます。

db.products.find();

このコマンドはドキュメントを返しません。

方法 2: drop() を使用してコレクション全体を削除する

drop() メソッドはより破壊的です。すべてのドキュメント、インデックス、および関連するメタデータを含むコレクション全体を削除します。

まず、サンプルデータを再挿入して、削除するコレクションを用意しましょう。

db.products.insertMany([
  { name: "Laptop", price: 1000, category: "Electronics" },
  { name: "Smartphone", price: 500, category: "Electronics" },
  { name: "Headphones", price: 100, category: "Electronics" }
]);

次に、products コレクション全体を削除します。

db.products.drop();

出力の true は、コレクションが正常に削除されたことを確認します。

true

これで products コレクションにクエリを実行しようとすると、コレクションが存在しなくなったため、結果は返されません。

db.products.find();

このコマンドは、コレクションがなくなったため、何も出力しません。mongosh シェルを終了するには、「exit」と入力するか、「Ctrl+D」を押します。

まとめ

この実験では、MongoDB でデータを削除するための基本的なテクニックを学びました。まず、特定のフィルターに基づいて単一のドキュメントを削除するために deleteOne() メソッドを使用しました。次に、基準に一致する複数のドキュメントを効率的に削除する deleteMany() を使用した一括削除に進みました。また、$gt$lt のようなクエリ演算子を使用して、より複雑な条件付き削除を実行する方法も探りました。最後に、コレクションをクリアするための 2 つの方法を学びました。コレクション構造を維持しながらすべてのドキュメントを削除する deleteMany({}) の使用方法と、コレクション全体を永続的に削除する drop() の使用方法です。

これらのスキルはデータベース管理において非常に重要であり、データライフサイクルの管理、不要なレコードのクリーンアップ、MongoDB データベース全体の健全性の維持を可能にします。