MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBの配列からオブジェクトを削除する方法|$pull演算子の使い方を解説

MongoDBの配列からオブジェクトを削除するには?

MongoDBでは、$pull 演算子を使うことで、配列から特定の条件に一致するオブジェクトを削除することができます。この記事では、実際にコレクションを作成し、配列内のオブジェクトを削除して結果を確認するまでの一連の手順を、サンプルコードとともにわかりやすく解説します。

手順1:ドキュメントを含むコレクションを作成する

まずは、insertOne() メソッドを使って、配列フィールドを持つドキュメントを挿入してみましょう。以下のクエリを実行します。

> db.removeObjectFromArrayDemo.insertOne(
... {
   ...
   ... "StudentName": "John",
   ... "StudentAcademicProjectDetails":
   ... [{
         ... "StudentProjectId": 101,
         ... "StudentProjectName": "Pig Dice Game"
      ... },
      ... {
         ... "StudentProjectId": 110,
         ... "StudentProjectName": "Library Management System"
      ... },
      ...
      ... {
         ... "StudentProjectId": 120,
         ... "StudentProjectName": "Phonebook Management System"
      ... }
   ... ]
   ... }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c8ad13d6cea1f28b7aa0817")
}

この例では、「StudentAcademicProjectDetails」というフィールドに、学生のプロジェクト情報を表す複数のオブジェクトが格納された配列を持つドキュメントを作成しています。ドキュメントが正常に挿入されると、「acknowledged: true」が返されます。

手順2:find()メソッドでドキュメントを表示する

find() メソッドを使うと、コレクション内のすべてのドキュメントを確認できます。以下のクエリを実行してください。

> db.removeObjectFromArrayDemo.find().pretty();

実行結果は以下の通りです。

{
   "_id" : ObjectId("5c8ad13d6cea1f28b7aa0817"),
   "StudentName" : "John",
   "StudentAcademicProjectDetails" : [
      {
         "StudentProjectId" : 101,
         "StudentProjectName" : "Pig Dice Game"
      },
      {
         "StudentProjectId" : 110,
         "StudentProjectName" : "Library Management System"
      },
      {
         "StudentProjectId" : 120,
         "StudentProjectName" : "Phonebook Management System"
      }
   ]
}

現在、配列には「StudentProjectId」が「101」「110」「120」の3つのオブジェクトが登録されていることが確認できます。

手順3:$pull演算子で配列からオブジェクトを削除する

それでは、MongoDBの配列からオブジェクトを削除するクエリを見ていきましょう。update() メソッドと組み合わせて $pull 演算子を使用することで、指定した条件に一致する要素だけを配列から取り除けます。

> db.removeObjectFromArrayDemo.update(
   ... {'_id': ObjectId("5c8ad13d6cea1f28b7aa0817")},
   ... { $pull: { "StudentAcademicProjectDetails" : { StudentProjectId: 101 } } },
   ... false,
   ... true
... );
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

このクエリでは、「StudentProjectId」が「101」であるオブジェクトを「StudentAcademicProjectDetails」配列から削除しています。「nModified: 1」と表示されていれば、更新が正常に完了しています。

なお、MongoDBの新しいバージョンでは update() の代わりに updateOne() を使うことが推奨されています。その場合、第3・第4引数のオプションは不要になり、より簡潔に記述できます。

手順4:削除後のドキュメントを確認する

最後に、オブジェクトが正しく配列から削除されているかどうか、もう一度 find() メソッドで確認しましょう。

> db.removeObjectFromArrayDemo.find().pretty();

実行結果は以下の通りです。

{
   "_id" : ObjectId("5c8ad13d6cea1f28b7aa0817"),
   "StudentName" : "John",
   "StudentAcademicProjectDetails" : [
      {
         "StudentProjectId" : 110,
         "StudentProjectName" : "Library Management System"
      },
      {
         "StudentProjectId" : 120,
         "StudentProjectName" : "Phonebook Management System"
      }
   ]
}

上記の出力結果を見ると、「StudentProjectId」が「101」のオブジェクトが配列から正常に削除され、残りの2つのプロジェクト情報だけが残っていることが確認できます。

まとめ

MongoDBの配列からオブジェクトを削除したい場合は、$pull 演算子を使用します。削除対象のフィールド名と条件を指定するだけで、条件に一致する要素のみを安全に取り除くことが可能です。複数の条件に一致する要素をまとめて削除できる点も、$pull 演算子の便利なポイントです。ぜひ実際の開発でも活用してみてください。

  1. MongoDBコレクションから重複を削除する方法|unique制約の使い方を解説

    MongoDBコレクションから重複を削除する方法MongoDBのコレクションに重複データが登録されるのを防ぎたい場合は、ユニーク制約(unique: true)を設定するのが最も基本的かつ確実な方法です。対象フィールドにユニークインデックスを作成しておくことで、同じ値を持つドキュメントの挿入が自動的に拒否され、コレクション内に重複が存在しない状態を維持できます。基本構文以下のように、コレクション名とフィールド名を指定してユニークインデックスを作成します。「dropDups: true」を付けることで、インデックス作成時点で既に存在していた重複ドキュメントも削除され、各グループの最初の1件のみが

  2. 【PHP入門】unset関数を使って配列から指定した要素(オブジェクト)を削除する方法

    PHPでは、unset関数を使用することで、配列内の特定のインデックスにある要素(オブジェクト)を削除することができます。この記事では、実際のコード例を使いながら、その基本的な使い方をわかりやすく解説します。コード例以下の例では、4つの要素を持つ配列から、インデックス2の要素を削除しています。$index = 2; $objectarray = array( 0 => array(label => abc, value => n23), 1 => array(label => def, value => 2n13), 2 =>