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
クエリで空のオブジェクトを使用し、multi
に true
を入れました。 基本的に、{}
はオブジェクト内のすべてのドキュメントを選択し、{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
演算子の詳細を参照してください。