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

MongoDBでドキュメントから配列要素を削除するクエリの書き方($pull演算子)

MongoDBのドキュメントから配列内の特定の要素を削除したい場合は、更新演算子「$pull」を使用します。$pullは、指定した値や条件に一致する要素を配列からすべて取り除くことができる便利な演算子です。

$pullの基本構文

db.yourCollectionName.update(
  { },
  { $pull: { yourFieldName: yourValue } },
  { multi: true }
);

第1引数に空のクエリ「{ }」を指定するとすべてのドキュメントが対象になり、「multi: true」オプションを付けることで、条件に一致した複数のドキュメントに対して一括で更新が適用されます。

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

まず、ドキュメントを含むコレクションを作成しましょう。ここでは、プレイヤー名の配列を持つドキュメントを2件挿入します。

> db.removeArrayElementsDemo.insertOne({ "AllPlayerName": ["John", "Sam", "Carol", "David"] });
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd90d011a844af18acdffc1")
}
> db.removeArrayElementsDemo.insertOne({ "AllPlayerName": ["Chris", "Robert", "John", "Mike"] });
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd90d2e1a844af18acdffc2")
}

登録済みドキュメントの確認

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

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

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

{
   "_id" : ObjectId("5cd90d011a844af18acdffc1"),
   "AllPlayerName" : [
      "John",
      "Sam",
      "Carol",
      "David"
   ]
}
{
   "_id" : ObjectId("5cd90d2e1a844af18acdffc2"),
   "AllPlayerName" : [
      "Chris",
      "Robert",
      "John",
      "Mike"
   ]
}

$pullで配列要素を削除する

それでは、"John"という値をAllPlayerName配列から削除してみましょう。

> db.removeArrayElementsDemo.update(
...    { },
...    { $pull: { AllPlayerName: "John" } },
...    { multi: true }
... );
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })

結果を見ると「nMatched: 2」「nModified: 2」と表示されており、2件のドキュメントがマッチし、両方とも正常に更新されたことがわかります。

削除後のドキュメント確認

もう一度すべてのドキュメントを確認し、配列から要素が正しく削除されたかチェックしましょう。

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

出力は以下のようになります。"John"だけが両方の配列から取り除かれ、他の要素はそのまま残っているのが確認できます。

{
   "_id" : ObjectId("5cd90d011a844af18acdffc1"),
   "AllPlayerName" : [
      "Sam",
      "Carol",
      "David"
   ]
}
{
   "_id" : ObjectId("5cd90d2e1a844af18acdffc2"),
   "AllPlayerName" : [
      "Chris",
      "Robert",
      "Mike"
   ]
}

補足:新バージョンでの推奨メソッド

MongoDB 3.4以降ではupdate()は非推奨とされており、複数のドキュメントを更新する場合はupdateMany()、1件のみの場合はupdateOne()の使用が推奨されています。上記と同じ処理は、次のように書き換えることができます。

db.removeArrayElementsDemo.updateMany(
  { },
  { $pull: { AllPlayerName: "John" } }
);
  1. MongoDBのAggregateでドキュメントと配列要素の平均値を取得する方法

    MongoDBでドキュメントのフィールドおよび配列内の各要素の平均値を求めるには、aggregate()メソッドと$groupステージを組み合わせ、平均を計算する$avg演算子を使用します。ここでは、実際にサンプルコレクションを作成しながら、具体的な手順を解説します。 サンプルコレクションの作成 まず、insertOne()メソッドを使ってドキュメントを挿入し、コレクションを作成します。 > db.demo598.insertOne( ...    { ...       Information:Student, ...   &

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

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