[MongoDB] field を削除するコマンド
MongoDB で不要なフィールドを削除するには db.collection.update を $unset で利用します。
$unset のためのデータ事前準備
まず、検証用のデータを insert します。今回は3件新規登録します。
> db.users.insert( { name : 'test' , age : 20 } ) > db.users.insert( { name : 'hoge' , age : 50 } ) > db.users.insert( { name : 'spam' , age : 90 } ) > db.users.find() { "_id" : ObjectId("55102489395c0a2d41edd220"), "name" : "test", "age" : 20 } { "_id" : ObjectId("551024c0395c0a2d41edd221"), "name" : "hoge", "age" : 50 } { "_id" : ObjectId("551025fc395c0a2d41edd222"), "name" : "spam", "age" : 90 } |
1件だけ $unset する
特定の _id の document の field を削除する場合、第一引数に条件を指定して、1件だけしか削除しないように第四引数に false を指定します。
> db.users.update( { _id : ObjectId( "55102489395c0a2d41edd220" ) } , { $unset : { age : 1 } } , false , false ) > db.users.find() { "_id" : ObjectId("55102489395c0a2d41edd220"), "name" : "test" } { "_id" : ObjectId("551024c0395c0a2d41edd221"), "name" : "hoge", "age" : 50 } { "_id" : ObjectId("551025fc395c0a2d41edd222"), "name" : "spam", "age" : 90 } |
全件 $unset する
全ての document の特定の field を削除する場合、第一引数に {} を指定して全ドキュメントを対象にして、第四引数に true を指定して該当する全ドキュメントのフィールドを削除対象にします。
> db.users.update( { } , { $unset : { age : 1 } } , false , true ) > db.users.find() { "_id" : ObjectId("55102489395c0a2d41edd220"), "name" : "test" } { "_id" : ObjectId("551024c0395c0a2d41edd221"), "name" : "hoge" } { "_id" : ObjectId("551025fc395c0a2d41edd222"), "name" : "spam" } |
$unset の使い方まとめ
最後に注意点として、update メソッドはすべてのドキュメントの field を吹っ飛ばす可能性があるので、本番データではできるだけ使わないようにしたいですね。