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

MongoDBでサブプロパティ(ネストされた配列)から要素を削除する方法 – $pull演算子の使い方

MongoDBでは、$pull 演算子を使うことで、ドキュメント内のサブプロパティ(ネストされたフィールド)に格納された配列から、条件に一致する要素を削除できます。この記事では、実際のコード例をもとに、手順をわかりやすく解説します。

1. コレクションとドキュメントの作成

まず、insertOne() メソッドを使って、サンプル用のドキュメントを作成します。ここでは userDetails オブジェクトの中に、isMarried フィールドと userInfo 配列がネストされた構造を用意しました。

> db.demo388.insertOne(
...    {
...       _id: '101',
...       userDetails: {
...          isMarried: false,
...          userInfo: [
...             {
...                Name:"Chris",
...                Age:21
...             }
...          ]
...       }
...    }
... );
{ "acknowledged" : true, "insertedId" : "101" }

2. ドキュメントの確認

find() メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。

> db.demo388.find();

実行すると、次のような出力が得られます。

{ "_id" : "101", "userDetails" : { "isMarried" : false, "userInfo" : [ { "Name" : "Chris", "Age" : 21 } ] } }

3. $pullを使って配列から要素を削除する

続いて、サブプロパティとして格納された配列から要素を削除するクエリを見ていきます。ポイントは、ドット記法(userDetails.userInfo)でネストされた配列のパスを指定することです。さらに、削除対象の条件として Name が「Chris」であるオブジェクトを指定しています。

> db.demo388.update(
...    { "_id": "101" },
...    { "$pull": { "userDetails.userInfo": { "Name":"Chris" } }
... })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

WriteResult の nModified が 1 になっていることから、1件のドキュメントが正常に更新されたことがわかります。

4. 削除後の確認

もう一度 find() メソッドを実行して、結果を確認しましょう。

> db.demo388.find();

出力を見ると、userInfo 配列から該当する要素が取り除かれ、空の配列になっていることが確認できます。

{ "_id" : "101", "userDetails" : { "isMarried" : false, "userInfo" : [ ] } }

まとめ

サブプロパティ内の配列から要素を削除したい場合は、$pull 演算子とドット記法を組み合わせることで実現できます。条件指定は { "Name": "Chris" } のようにオブジェクト形式で記述できるため、配列内の特定のフィールド値に一致する要素だけをピンポイントで削除できるのが特徴です。なお、新しいバージョンのMongoDBでは updateOne() の使用が推奨されているため、実運用ではそちらを選ぶとよいでしょう。

  1. MongoDBで配列の要素を削除するには?$pull演算子の使い方を解説

    MongoDBで配列から要素を削除する基本MongoDBで配列内の要素を削除したい場合は、$pull演算子を使用します。$pullは、既存の配列から指定した値、または条件に一致するすべてのインスタンスを取り除くための更新演算子です。この記事では、実際にコレクションを作成し、ネストされた配列から特定の要素を削除する手順を順番に解説します。サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。ここでは「software」フィールドの中に「services」という配列を持つドキュメントを挿入します。db.demo541.insertOne({software:{servic

  2. MongoDBでコレクションから配列フィールド全体を削除するクエリの書き方

    MongoDBで配列フィールドを完全に削除するにはMongoDBのコレクションから、ドキュメント内の配列フィールドそのもの(フィールドごと)を取り除きたい場合は、更新演算子の $unset を使用します。$unset は指定したフィールドをドキュメントから削除する演算子で、配列の中身だけを空にするのではなく、フィールド自体が存在しない状態にできます。ここでは、サンプルコレクションを作成して、実際に配列フィールドを削除する手順を見ていきましょう。1. サンプルコレクションの作成まず、insertOne() メソッドを使ってドキュメントを挿入し、テスト用のコレクション demo609 を作成します