[MongoDB] field を削除するコマンド

MongoDB で不要なフィールドを削除するには db.collection.update を $unset で利用します。

MongoDB | モンゴディービー

$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 を吹っ飛ばす可能性があるので、本番データではできるだけ使わないようにしたいですね。

参考情報