2012-02-04 3 views
6

その値を無効化していません。そこで、上記のbelongs_toとhas_many行をすべて削除しました。しかし、コンソールでは、私が実験したグループレコードを取得するたびに、この "groupable_type"属性が残っています。 remove_attribute属性を無効にしますが、削除しません(JavaScriptのように聞こえる)。 Mongoidからこの属性をデータベースから実際に削除するにはどうすればよいですか?Mongoidモデルから属性を削除する方法、すなわち、ちょうど私が、私はそれに対して決定 <pre><code>class Group include Mongoid::Document belongs_to :groupable, polymorphic: true end class Album include Mongoid::Document has_many :groups, as: groupable end </code></pre> <p>Mongoid</p>で多型associatonを試した

答えて

13

あなたはこれを行うことができます:更新方法は、コレクションになくなっていますが、この作品2.0.0.rc1私は原付に気づい

Group.collection.update({}, 
         {'$unset' => {:groupable_type => 1}}, 
         :multi => true) 
+0

私はグーグルで「アンセット」について何かを見ましたが、それはmongoコンソールからの何かであることに気づいていませんでした。 - あなたの意見では、これはフィールドを削除するには少し面倒ではありませんか?ありがとう! –

+5

これは "mongoコンソールから"ではなく、ファーストクラスのmongodb演算子です。モンゴイドにはこのためのヘルパーメソッドがあるかもしれませんが、根底にあるドライバに行くのは悪いことではありません。また、あなたはいつでもそのようなヘルパーを書くことができます。 :) –

+0

oops .. ooops .. ooops ..私が何かを見たときに何らかの理由で、私はコンソールのことを考えました。それは申し訳ありません。私はMongoDB/Mongoidに移行した大きな理由の1つでした(また、私はもう何も "移行する必要はありません:D")。もう3分待って "回答"を確認してください –

0

。 Mongoidのバージョン5.0.0のよう

Group.collection.find().update(
        {'$unset' => {:groupable_type => 1}}, 
        :multi => true)  
2

、宝石は、更新のためのさまざまな構文を持つ「公式のルビーのMongoDBドライバー」を使用するために原付を使用してから切り替えました。参考:https://docs.mongodb.org/ecosystem/drivers/ruby/

収集方法のドキュメントはここにある: http://api.mongodb.org/ruby/current/Mongo/Collection.html

2つのメソッド、 "更新" と "update_many" はあります。 'multi'オプションを指定する代わりに、update_manyを使用してすべてのドキュメントを更新することができます。

例のOPの場合に使用する:あなたは、ドット表記を使用して埋め込まれた文書の設定を解除することができます

Group.collection.update_many({}, {'$unset' => {'groupable_type' => true}}) 

注:それはウェル内の未設定/更新フィールドにはMongoDBでサポートされていない

Group.collection.update_many({}, {'$unset' => {'embedded_doc.groupable_type' => true}}) 

注意をアレイ。情報と回避策については、このスレッドを参照してください:https://jira.mongodb.org/browse/SERVER-1243