MongoDB の $unset 演算子

Shihab Sikder 2023年6月20日
  1. MongoDB の $unset 演算子
  2. $unset 演算子を使用して、MongoDB のすべてのドキュメントからフィールドを削除する
MongoDB の $unset 演算子

この記事では、MongoDB で $unset 演算子がどのように機能するかについて説明します。 さらに、この演算子を使用して、MongoDB コレクション内のすべてのドキュメントからフィールドを削除する方法を示します。

MongoDB の $unset 演算子

$unset は、エンティティからフィールドを削除するために使用される演算子です。 これは MongoDB の update メソッドで使用され、そのメソッドで一致が見つからない場合は何も影響しません。

MongoDB データベースに次のドキュメントがあるとします。

> db.employee.find().pretty()
{"_id":1,   "name":"Alice", "salary": 1500}
{"_id":2,   "name":"Bob",   "salary": 2500}
{"_id":3,   "name":"Jhon",  "salary": 3500, "role":"Owner"}
{"_id":4,   "name":"Grace", "salary": 4500}

ドキュメント内に 4つのエンティティがあり、パラメータなしで find() メソッドが使用されています。 employee コレクションのすべてのエンティティを返し、pretty() を使用してエンティティをフォーマットされた方法で出力します。

ここで、何らかの理由でフィールド role を表示したくないとしましょう。 したがって、行から削除する必要があります。

クエリは次のようになります。

> db.employee.update({_id:3}, {$unset : {"role":""}} )
> db.employee.find().pretty()
{"_id":1,   "name":"Alice", "salary": 1500}
{"_id":2,   "name":"Bob",   "salary": 2500}
{"_id":3,   "name":"Jhon",  "salary": 3500}
{"_id":4,   "name":"Grace", "salary": 4500}

ここで、id = 3 である最初に一致したドキュメントからフィールド role を削除します。

multiple の短縮形である multi と呼ばれる別のオプションには、デフォルトで false の値があります。

その値が true の場合、一致するすべてのドキュメントに対する update クエリに影響します。

$unset 演算子を使用して、MongoDB のすべてのドキュメントからフィールドを削除する

MongoDB コレクション内のすべてのドキュメントからフィールド salary を削除するよう求められたとします。 各 ID に対して update コマンドを 1 回使用すると、時間がかかります。

むしろ、次のことを行う必要があります。

> db.employee.update({}, {$unset:{"salary": ""}}, {multi: true})
> db.employee.find().pretty()
{"_id":1,   "name":"Alice"  }
{"_id":2,   "name":"Bob"    }
{"_id":3,   "name":"Jhon"   }
{"_id":4,   "name":"Grace"  }

update クエリで空のオブジェクトを使用し、multitrue を入れました。 基本的に、{} はオブジェクト内のすべてのドキュメントを選択し、{multi: true}update メソッドから一致したすべてのドキュメントに影響します。

基本的な形式は次のとおりです(公式ドキュメントから):

db.collection.updateOne(<filter>, <update>, <options>)
db.collection.updateMany(<filter>, <update>, <options>)
db.collection.replaceOne(<filter>, <update>, <options>)

update メソッドでは $unset 演算子を使用でき、options では multi を使用できます。

公式ドキュメント$unset 演算子の詳細を参照してください。

著者: Shihab Sikder
Shihab Sikder avatar Shihab Sikder avatar

I'm Shihab Sikder, a professional Backend Developer with experience in problem-solving and content writing. Building secure, scalable, and reliable backend architecture is my motive. I'm working with two companies as a part-time backend engineer.

LinkedIn Website

関連記事 - MongoDB Operator