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

MongoDBで配列の単一要素から属性を削除($unset)する方法

MongoDBで配列の単一要素から属性を削除するには?

配列内の特定の要素だけから属性を削除(設定解除)したい場合は、$unset 演算子と位置演算子「$」を組み合わせて使用します。まず、サンプルとなるドキュメントを含むコレクションを作成しましょう。

> db.unsetAnAttributeDemo.insertOne(
...     {
...        _id: 1,
...        "StudentDetails": [
...           {
...              "StudentFirstName": "Ramit",
...              "StudentCountryName":"UK"
...           },
...           {
...              "StudentFirstName": "Bob",
...              "StudentCountryName":"US"
...           },
...           {
...              "StudentFirstName": "Carol",
...              "StudentCountryName":"AUS"
...           }
...        ]
...     }
... );
{ "acknowledged" : true, "insertedId" : 1 }

コレクション内のドキュメントを確認する

find() メソッドを使って、コレクション内のすべてのドキュメントを表示するクエリは以下の通りです。

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

上記のクエリを実行すると、次のような出力が得られます。

{
    "_id" : 1,
    "StudentDetails" : [
       {
          "StudentFirstName" : "Ramit",
          "StudentCountryName" : "UK"
       },
       {
          "StudentFirstName" : "Bob",
          "StudentCountryName" : "US"
       },
       {
          "StudentFirstName" : "Carol",
          "StudentCountryName" : "AUS"
       }
    ]
}

単一の配列要素から属性を削除するクエリ

次に、配列内の単一要素から属性を削除するクエリを見ていきましょう。ここでは、値が「AUS」である属性「StudentCountryName」を削除します。

> db.unsetAnAttributeDemo.update({"StudentDetails.StudentCountryName": "AUS"}, {$unset:
    {"StudentDetails.$.StudentCountryName": 1}});
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

このクエリのポイントは、条件に一致した配列要素を参照する位置演算子「$」です。「StudentDetails.$.StudentCountryName」を指定することで、値が「AUS」に一致した要素だけが対象になります。

削除結果の確認

最後に、コレクションからドキュメントを表示して、値が「AUS」の属性 StudentCountryName が正しく削除されたかどうかを確認しましょう。

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

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

{
    "_id" : 1,
    "StudentDetails" : [
       {
          "StudentFirstName" : "Ramit",
          "StudentCountryName" : "UK"
       },
       {
          "StudentFirstName" : "Bob",
          "StudentCountryName" : "US"
       },
       {
          "StudentFirstName" : "Carol"
       }
    ]
}

出力結果を見ると、3番目の要素(Carol)からのみ StudentCountryName フィールドが削除され、他の要素(UK・US)には影響していないことがわかります。このように、位置演算子「$」と $unset 演算子を組み合わせることで、配列内の条件に一致した単一の要素からだけ特定のフィールドを安全に削除できます。

  1. MongoDBでインデックスを指定して検索結果から単一の要素を取得する方法

    MongoDBで複数件の検索結果の中から、特定の位置(インデックス)にある単一のドキュメントだけを取り出したい場合があります。そのようなときは、アグリゲーション(集計パイプライン)と $limit を組み合わせるのが有効です。また、$skip を使うことで、指定した件数のドキュメントを読み飛ばすことができます。サンプルコレクションの作成まず、insertOne() メソッドを使って、ドキュメントを含むコレクションを作成します。> db.demo391.insertOne( ... { _id : 101, Name : Chris, Values: [101, 102] } ..

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

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