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

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

MongoDBで配列から要素を削除する基本

MongoDBで配列内の要素を削除したい場合は、$pull演算子を使用します。$pullは、既存の配列から指定した値、または条件に一致するすべてのインスタンスを取り除くための更新演算子です。

この記事では、実際にコレクションを作成し、ネストされた配列から特定の要素を削除する手順を順番に解説します。

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

まず、ドキュメントを含むコレクションを作成しましょう。ここでは「software」フィールドの中に「services」という配列を持つドキュメントを挿入します。

db.demo541.insertOne({"software":{"services":["gmail","facebook","yahoo"]}});{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e8ca845ef4dcbee04fbbc11")
}
> db.demo541.insertOne({"software":{"services":["whatsapp","twitter"]}});{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e8ca85cef4dcbee04fbbc12")
}

find()メソッドでドキュメントを確認する

挿入したすべてのドキュメントを表示するには、find()メソッドを使用します。

> db.demo541.find();

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

{ "_id" : ObjectId("5e8ca845ef4dcbee04fbbc11"), "software" : { "services" : [ "gmail", "facebook", "yahoo" ] } }
{ "_id" : ObjectId("5e8ca85cef4dcbee04fbbc12"), "software" : { "services" : [ "whatsapp", "twitter" ] } }

$pullを使って配列の要素を削除する

それでは、MongoDBの配列から要素を削除するクエリを見ていきましょう。以下の例では、ObjectIdが「5e8ca845ef4dcbee04fbbc11」のドキュメントから、「yahoo」という値をservices配列から削除しています。

> db.demo541.update({ _id: ObjectId("5e8ca845ef4dcbee04fbbc11") },
...    { $pull: { 'software.services': "yahoo" }}
... );
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

ポイントは、ネストされたフィールドに対してドット記法(software.services)でパスを指定している点です。これにより、入れ子になったオブジェクト内の配列も正しく操作できます。

削除後の結果を確認する

再度find()メソッドを実行して、すべてのドキュメントを表示してみましょう。

> db.demo541.find();

出力結果は以下の通りです。「yahoo」が配列から正常に削除されていることが確認できます。

{ "_id" : ObjectId("5e8ca845ef4dcbee04fbbc11"), "software" : { "services" : [ "gmail", "facebook" ] } }
{ "_id" : ObjectId("5e8ca85cef4dcbee04fbbc12"), "software" : { "services" : [ "whatsapp", "twitter" ] } }

補足:updateOne()と$pullAllについて

なお、上記の例で使用しているupdate()メソッドは非推奨となっているため、現在のバージョンのMongoDBではupdateOne()updateMany()の使用が推奨されています。書き方はほぼ同じです。

db.demo541.updateOne(
   { _id: ObjectId("5e8ca845ef4dcbee04fbbc11") },
   { $pull: { 'software.services': "yahoo" } }
);

また、複数の値をまとめて削除したい場合は、$pullAll演算子が便利です。条件マッチングではなく、指定した値のリストに一致する要素をすべて削除します。

db.demo541.updateOne(
   { _id: ObjectId("5e8ca845ef4dcbee04fbbc11") },
   { $pullAll: { 'software.services': ["gmail", "facebook"] } }
);

まとめ

MongoDBで配列の要素を削除するには、$pull演算子を使うのが基本です。単一の値でも条件式でも柔軟に対応でき、ドット記法を組み合わせればネストされた配列にも適用できます。最新の環境ではupdateOne()/updateMany()を使うことを忘れないようにしましょう。

  1. Swiftの配列から特定の要素を削除する方法を徹底解説

    Swiftで配列から特定の要素を削除したい場合、いくつかの方法があります。この記事では、実際のコード例を交えながら、代表的な2つの方法をわかりやすく解説します。 まずは、String型の配列を用意しましょう。 var arrayOfString = [a,b,c,f] この配列を使って、以下の2つの方法で特定の要素を削除していきます。 方法1:filterメソッドを使う Swiftの配列にはfilterメソッドが標準で用意されています。これは、指定した条件に基づいて要素を絞り込み、新しい配列として返すメソッドです。削除したい要素を条件から除外することで、実質的にその要素を取り除くことができます

  2. C#の配列から要素を削除する方法【サンプルコード付きで解説】

    C#の配列は固定長のため、要素を直接「削除」することはできません。そこで一般的に用いられるのが、削除したい位置以降の要素を一つ前へずらす(シフトする)ことで、実質的にその要素を取り除く手法です。 基本的な考え方:要素をシフトして削除する まず、次のように5つの要素を持つ配列を用意します。 int[] arr = new int[5] {35, 50, 55, 77, 98}; たとえば2番目の位置(pos = 2、つまり arr[1])の要素「50」を削除したい場合は、その位置より後ろにある要素をすべて一つずつ前に移動させます。 // 削除位置以降の要素を前方へシフト for (i