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

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

MongoDBでは、配列に格納されたオブジェクト(ドキュメント)を削除したい場面がよくあります。そんなときに活躍するのが $pull 演算子です。$pull を使うと、指定した条件に一致する要素だけを配列から取り除くことができます。

$pull演算子の基本構文

配列からオブジェクトを削除する際の基本的な構文は以下のとおりです。

db.yourCollectionName.update(
  {'_id': ObjectId("5c6ea036a0c51185aefbd14f")},
  {$pull: {"yourArrayName": {"yourArrayFieldName": yourValue}}},
  false,
  true
);

第3引数の false はアップサート(該当ドキュメントが存在しない場合に新規作成しない設定)、第4引数の true は複数ドキュメントへの適用を意味します。条件に一致した配列内の要素がすべて削除される点もポイントです。

サンプルコレクションの作成

実際の動きを確認するために、まずはサンプルとなるコレクションを作成しましょう。以下のクエリを実行して、顧客情報を持つドキュメントを挿入します。

> db.removeObject.insertOne({
...   "CustomerName": "Maxwell",
...   "CustomerAge": 23,
...   "CustomerDetails": [
...     {
...       "CustomerId": 100,
...       "CustomerProduct": "Product-1"
...     },
...     {
...       "CustomerId": 150,
...       "CustomerProduct": "Product-2"
...     },
...     {
...       "CustomerId": 200,
...       "CustomerProduct": "Product-3"
...     }
...   ]
... });
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c6ea036a0c51185aefbd14f")
}

このドキュメントには、CustomerDetails という配列フィールドの中に3つのオブジェクトが格納されています。ここから「CustomerId: 150」のオブジェクトを削除するのが目標です。

挿入したデータの確認

find() メソッドを使うと、コレクション内の全ドキュメントを表示できます。

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

実行結果は次のとおりです。

{
    "_id" : ObjectId("5c6ea036a0c51185aefbd14f"),
    "CustomerName" : "Maxwell",
    "CustomerAge" : 23,
    "CustomerDetails" : [
        {
            "CustomerId" : 100,
            "CustomerProduct" : "Product-1"
        },
        {
            "CustomerId" : 150,
            "CustomerProduct" : "Product-2"
        },
        {
            "CustomerId" : 200,
            "CustomerProduct" : "Product-3"
        }
    ]
}

配列からオブジェクトを削除するクエリ

それでは、$pull 演算子を使って配列からオブジェクトを削除してみましょう。「CustomerId」が150のオブジェクトを削除するクエリは以下のとおりです。

> db.removeObject.update(
...   {'_id': ObjectId("5c6ea036a0c51185aefbd14f")},
...   {$pull: {"CustomerDetails": {"CustomerId": 150}}},
...   false,
...   true
... );
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

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

削除後のデータを確認

更新後のドキュメントを再度表示して、オブジェクトが正しく削除されたか確認しましょう。

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

実行結果は次のとおりです。

{
    "_id" : ObjectId("5c6ea036a0c51185aefbd14f"),
    "CustomerName" : "Maxwell",
    "CustomerAge" : 23,
    "CustomerDetails" : [
        {
            "CustomerId" : 100,
            "CustomerProduct" : "Product-1"
        },
        {
            "CustomerId" : 200,
            "CustomerProduct" : "Product-3"
        }
    ]
}

このように、「CustomerId: 150」のオブジェクトが配列から完全に取り除かれ、残りの2件だけが残っていることが確認できました。

まとめ

MongoDBで配列内の特定のオブジェクトを削除するには、$pull 演算子を使用します。削除したい要素の条件を {$pull: {配列名: {条件}}} の形式で指定するだけで、一致するオブジェクトをまとめて除去できます。配列操作はアプリケーション開発でも頻繁に行われるため、$pull の使い方はぜひ覚えておきましょう。

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

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

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

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