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

MongoDBの配列からnull要素を削除する方法($pull演算子の使い方)

MongoDBの配列に含まれる null 要素を削除したい場合は、$pull 演算子を使用するのが最も簡単です。$pull は、指定した条件に一致する値や要素を既存の配列からすべて取り除くための更新演算子です。

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

まずは動作確認用に、ドキュメントを含むコレクションを作成しましょう。ここでは removeNullDemo コレクションに2件のドキュメントを挿入します。1件目のドキュメントの StudentDetails 配列には、検証用として意図的に null を含めています。

> db.removeNullDemo.insertOne(
... {
...    "_id" : 1,
...    "StudentDetails" : [
...       {
...          "FirstName": "John",
...          "LastName":"Smith",
...
...       },
...       {
...          "Age":21
...       },
...       null
...
...    ]
... }
... );
{ "acknowledged" : true, "insertedId" : 1 }
> db.removeNullDemo.insertOne(
... {
...    "_id" : 2,
...    "StudentDetails" : [
...       {
...          "FirstName": "Carol",
...          "LastName":"Taylor",
...
...       },
...       {
...          "Age":23
...       }
...
...
...    ]
... }
... );
{ "acknowledged" : true, "insertedId" : 2 }

挿入されたドキュメントの確認

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

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

実行すると、以下のような出力が得られます。_id: 1 のドキュメントの StudentDetails 配列に null が含まれていることが確認できます。

{
   "_id" : 1,
   "StudentDetails" : [
      {
         "FirstName" : "John",
         "LastName" : "Smith"
      },
      {
         "Age" : 21
      },
      null
   ]
}
{
   "_id" : 2,
   "StudentDetails" : [
      {
         "FirstName" : "Carol",
         "LastName" : "Taylor"
      },
      {
         "Age" : 23
      }
   ]
}

$pull演算子でnull要素を削除する

それでは、$pull 演算子を使って MongoDB の配列から null 要素を削除します。更新対象のドキュメントを _id: 1 で指定し、{$pull: {StudentDetails: null}} を実行することで、StudentDetails 配列内の null 値だけが取り除かれます。名前や年齢といったサブドキュメントなど、その他の要素は一切影響を受けません。

> db.removeNullDemo.update({_id:1},{$pull:{StudentDetails:null}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

実行結果の「nMatched: 1」「nModified: 1」という表示から、1件のドキュメントが正常にマッチして更新されたことがわかります。

削除結果の確認

null が実際に削除されたかどうか、もう一度 find() メソッドでコレクションの中身を確認してみましょう。

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

出力を見ると、_id: 1 のドキュメントの StudentDetails 配列から null 要素が完全に取り除かれ、John Smith のオブジェクトと Age: 21 のオブジェクトだけが残っていることが確認できます。

{
   "_id" : 1,
   "StudentDetails" : [
      {
         "FirstName" : "John",
         "LastName" : "Smith"
      },
      {
         "Age" : 21
      }
   ]
}
{
   "_id" : 2,
   "StudentDetails" : [
      {
         "FirstName" : "Carol",
         "LastName" : "Taylor"
      },
      {
         "Age" : 23
      }
   ]
}

まとめ

MongoDBで配列から null 要素を削除するには、update() メソッドと $pull 演算子を組み合わせて、{$pull: {フィールド名: null}} の形式で指定します。この方法なら、null 以外の要素(サブドキュメントや数値など)はそのまま保持され、null だけを安全かつ確実に除去できます。なお、最新の MongoDB では非推奨となった update() の代わりに、updateOne()updateMany() の使用が推奨されている点にも留意しておきましょう。

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

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

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

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