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 演算子の詳細を参照してください。
