2011-12-27 8 views
43

ドキュメント定義からいくつかのフィールドを削除しました。コレクションのすべてのドキュメントにわたってこのフィールドを削除したいと思います。どうしたらいいですか?Mongoで廃止予定のフィールドを削除するには?

+3

参照[この高度に関連する問題(http://stackoverflow.com/questions/4987289/how-to-remove-column-from-child-collection) – Cameron

答えて

112

試してみてください。

db.collection.update(
    { '<field>': { '$exists': true } }, // Query 
    { '$unset': { '<field>': true } }, // Update 
    false,        // Upsert 
    true         // Multi-update 
) 

fieldがあなたの非推奨のフィールドで、collectionはそれから削除されたコレクションです。

一般更新コマンドの形式は、db.collection.update(criteria, objNew, upsert, multi)です。 falsetrue引き数の引数は、アップサンプリングモードを無効にし、マルチ更新を有効にして、コレクション内のすべてのドキュメント(最初の一致だけでなく)を更新します。 MongoDBの2.2 +

ため

更新あなたは今の代わりにアップサートとマルチのための位置引数のJSONオブジェクトを提供することができます。

db.collection.update(
    { '<field>': { '$exists': true } }, // Query 
    { '$unset': { '<field>': true } }, // Update 
    { 'multi': true }     // Options 
) 
+3

$ unset文のフィールドの値に指定された値(ここでは1)は、操作に影響を与えません。 [$ unset operator](http://docs.mongodb.org/manual/reference/operator/unset/#_S_unset) – Xiao

29

はちょうど誰かがupdate()hereを使用すると、あまりにもすごいです与えた$unset答えうーん、この

db.people.find().forEach(function(x) { 
    delete x.badField; 
    db.people.save(x); 
}) 

ような何かを行います。

+0

Thxを、Jamund。あなたのアプローチも有効です。 –

+0

2つの回答を受け入れることはできません。だからちょうどそれをupvoted。 –

+0

ありがとう、とても親切です! –

関連する問題