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

MongoDBでインデックスを指定して配列要素を削除する方法($unsetと$pullの使い方)

MongoDBでインデックスを指定して配列要素を削除するには?

MongoDBでは、配列から特定のインデックス位置にある要素を直接削除する単一の演算子は用意されていません。そのため、$unset 演算子と $pull 演算子を組み合わせた、次の2段階の手順を使用します。

削除手順の基本構文

db.yourCollectionName.update({},{$unset:{"yourArrayListName.yourPosition":yourPositionValue}});
db.yourCollectionName.update({},{$pull:{"yourArrayListName":null}});

手順の流れは以下のとおりです。

  1. $unset:対象のインデックス位置の値を null に置き換えます(この時点では要素自体はまだ配列内に残っています)。
  2. $pull:配列から null の要素を取り除きます。これにより配列の要素が詰められます。

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

実際に動作を確認するため、ドキュメントを含むコレクションを作成しましょう。以下のクエリを実行します。

> db.removeArrayElements.insertOne({"StudentName":"Larry","StudentAge":23,"TechnicalSubject":["C","C++","Java","MongoDB"]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c6ea4879c4643706aef56d2")
}

登録データの確認

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

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

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

{
    "_id" : ObjectId("5c6ea4879c4643706aef56d2"),
    "StudentName" : "Larry",
    "StudentAge" : 23,
    "TechnicalSubject" : [
        "C",
        "C++",
        "Java",
        "MongoDB"
    ]
}

インデックスを指定した要素の削除

それでは、インデックス3(4番目)にある「MongoDB」を削除してみましょう。まず $unset で該当位置の値を null にし、続けて $pull で null を取り除きます。

> db.removeArrayElements.update({},{$unset:{"TechnicalSubject.3":1}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

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

削除結果の確認

再度 find() メソッドでドキュメントを表示し、結果を確認します。

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

実行結果:

{
    "_id" : ObjectId("5c6ea4879c4643706aef56d2"),
    "StudentName" : "Larry",
    "StudentAge" : 23,
    "TechnicalSubject" : [
        "C",
        "C++",
        "Java"
    ]
}

出力を見ると、インデックス3にあった「MongoDB」が配列から削除され、残りの要素が詰められていることがわかります。

補足:最新バージョンでの注意点

近年のMongoDBでは update() メソッドは非推奨とされており、代わりに updateOne() や updateMany() の使用が推奨されています。また、条件に一致する複数の要素を一括で削除したい場合は $pull を単独で使う方法や、配列フィルタ(arrayFilters)を活用する方法なども選択肢となります。用途に応じて最適な方法を使い分けるとよいでしょう。

  1. MongoDBで$pushを使って配列に要素を追加する方法

    MongoDBで配列をプッシュするには?MongoDBで配列に要素を追加(プッシュ)するには、$push演算子を使用します。$pushは更新(update)操作だけでなく、集計フレームワーク(aggregation)の$groupステージと組み合わせることで、複数のドキュメントを1つの配列にまとめることにも活用できます。ここでは、実際にドキュメントを作成し、$pushを使って配列を生成する手順をサンプルコードとともに解説します。1. サンプルコレクションの作成まず、insertOne()メソッドを使って、ドキュメントを含むコレクションを作成します。> db.demo399.insertO

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

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