Ruby on rails 如何从Mongoid模型中删除属性,也就是说,不只是取消属性值

Ruby on rails 如何从Mongoid模型中删除属性,也就是说,不只是取消属性值,ruby-on-rails,mongoid,Ruby On Rails,Mongoid,我在Mongoid中试验多态关联 class Group include Mongoid::Document belongs_to :groupable, polymorphic: true end class Album include Mongoid::Document has_many :groups, as: groupable end 然后我决定反对。因此,我删除了所有属于我的内容,上面有很多行。然而在控制台中,每当我得到一个我实验过的组记录时,它仍

我在Mongoid中试验多态关联

class Group
    include Mongoid::Document
    belongs_to :groupable, polymorphic: true
end

class Album
    include Mongoid::Document
    has_many :groups, as: groupable
end
然后我决定反对。因此,我删除了所有属于我的内容,上面有很多行。然而在控制台中,每当我得到一个我实验过的组记录时,它仍然有这个“groupable_type”属性。我知道remove_属性会使属性无效,但不会删除它(听起来有点像JavaScript)。如何从Mongoid数据库中删除此属性?

您可以这样做:

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

我注意到在MOPED2.0.0.rc1中,更新方法是在收集中进行的,但这是可行的

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

从Mongoid的5.0.0版开始,gem已经从使用Moped转向使用“官方ruby MongoDB驱动程序”,该驱动程序具有不同的更新语法。参考:

收集方法的文档如下所示:

有两种方法,“更新”和“更新很多”。您可以使用update_many来更新所有文档,而不是指定“multi”选项

用于OPs案例的示例:

Group.collection.update_many({}, {'$unset' => {'groupable_type' => true}})
注意:您可以使用点符号取消设置嵌入文档:

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

注意MongoDB不支持在数组中取消设置/更新字段。有关信息和解决方法,请参阅此线程:。

对于单个实例,可以(至少在最新版本的Mongoid中)在您的实例上直接使用
取消设置

Group.first.unset('groupable_type')

在谷歌搜索之后,我确实看到了一些关于“unset”的东西,但没有意识到这是来自mongo控制台的东西在您看来,删除字段不是有点麻烦吗?谢谢它不是“来自mongo控制台”,而是一流的mongodb运营商。Mongoid可能有一个辅助方法来实现这一点,但转到底层驱动程序并没有什么坏处。此外,您也可以自己编写此类帮助程序。:)哎呀。。哎呀。。哎呀。。每当我看到美元的东西,出于某种原因,我就会想到控制台。。很抱歉。我完全同意,拥有如此强大的底层一级操作符是我迁移到MongoDB/Mongoid的一个重要原因(而且我也不必再“迁移”任何东西:D)。再等3分钟检查“已回答”
MongoidCollection.all.unset(:attribute\u name)
更简单、更简洁。@konflikt,我认为您应该将此作为答案。