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

【MongoDB】$unset演算子でドキュメント内の特定データ(フィールド)を削除する方法

MongoDBでドキュメント内の特定データを削除する方法

MongoDBでドキュメントから特定のフィールド(データ)を削除するには、$unset演算子を使用します。まず、サンプルとしてコレクションを作成し、ドキュメントを挿入してみましょう。

> db.demo20.insertOne(
...    {
...
...       "ListOfEmployee" : [
...          {
...             "EmployeeName1" : "John"
...          },
...          {
...             "EmployeeName2" : "Carol"
...          }
...       ],
...       "EmployeeName2" : []
...    }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e138c3555d0fc6657d21f12")
}

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

> db.demo20.find();

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

{ "_id" : ObjectId("5e138c3555d0fc6657d21f12"), "ListOfEmployee" : [ { "EmployeeName1" : "John" }, { "EmployeeName2" : "Carol" } ], "EmployeeName2" : [ ] }

それでは、ドキュメント内の特定のデータを削除するクエリを見ていきましょう。$exists演算子で対象フィールドの存在を確認したうえで、$unsetによってそのフィールドを削除します。

> db.demo20.update({ "EmployeeName2": { "$exists": 1 }},{ "$unset": { "EmployeeName2": "" } });
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

結果として「nModified : 1」と表示され、1件のドキュメントが正常に更新されたことが確認できます。

もう一度find()メソッドですべてのドキュメントを表示し、削除が反映されているか確認しましょう。

> db.demo20.find();

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

{ "_id" : ObjectId("5e138c3555d0fc6657d21f12"), "ListOfEmployee" : [ { "EmployeeName1" : "John" }, { "EmployeeName2" : "Carol" } ] }

出力を見ると、トップレベルの「EmployeeName2」フィールドが完全に削除されていることがわかります。一方で、配列「ListOfEmployee」内にネストされた「EmployeeName2」はそのまま残っています。これは、$unsetが指定されたパスのフィールドだけを削除する仕組みだからです。

補足:最新のMongoDBでの推奨される書き方

MongoDB 3.x以降では、update()メソッドは非推奨となっており、代わりにupdateOne()updateMany()の使用が推奨されています。同じ処理は以下のように記述できます。

> db.demo20.updateOne(
...    { "EmployeeName2": { "$exists": true } },
...    { "$unset": { "EmployeeName2": "" } }
... );
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

このように、$unset演算子を活用すれば、ドキュメントから不要なフィールドを簡単かつ安全に取り除くことができます。条件に一致するすべてのドキュメントから一括で削除したい場合は、updateMany()を使用すると便利です。

  1. MongoDBでドキュメント内の配列から特定の値を削除する方法($pull演算子の使い方)

    MongoDBで配列から値を削除したい場合は、$pull 演算子を使用します。$pull は、既存の配列から指定した条件に一致する値(または複数の値)のすべてのインスタンスを取り除くための更新演算子です。1. サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。> db.demo535.insertOne( ... { ... studentId : 101, ... studentName : Chris, ... ListOfMailIds : [ ... Chris@gmail.com, ... Chr

  2. Javaを使用してMongoDBのドキュメントを削除するには?基本とサンプルコード解説

    MongoDBでは、既存のコレクションからドキュメントを削除する際に remove() メソッドを使用できます。本記事では、MongoDBシェルでの削除方法と、Javaプログラムからドキュメントを削除する方法を順を追って解説します。 構文 db.coll.remove(削除条件) 各要素の意味は以下のとおりです。 db: 操作対象のデータベース coll: ドキュメントを削除したいコレクション名 例 MongoDBデータベースに students というコレクションがあり、次のドキュメントが登録されていると仮定します。 {name:Ram, age:26, city:Mumbai} {na