我在Mongoid中试验了多态联想
class Group
    include Mongoid::Document
    belongs_to :groupable, polymorphic: true
end
class Album
    include Mongoid::Document
    has_many :groups, as: groupable
end然后我决定不这么做了。所以我删除了上面所有的belongs_to和has_many行。然而,在控制台中,每当我得到一个我尝试过的组记录时,它仍然有这个"groupable_type“属性。我知道remove_attribute会将该属性置为空,但不会删除它(听起来有点像JavaScript)。我如何从Mongoid中删除数据库中的这个属性?
发布于 2012-02-05 04:35:09
你可以这样做:
Group.collection.update({},
                        {'$unset' => {:groupable_type => 1}},
                        :multi => true)发布于 2015-10-30 23:38:47
从Mongoid的5.0.0版本开始,gem已经从使用Moped切换到使用‘官方ruby MongoDB驱动程序’,该驱动程序具有不同的更新语法。参考:https://docs.mongodb.org/ecosystem/drivers/ruby/
收集方法的文档在这里:http://api.mongodb.org/ruby/current/Mongo/Collection.html
有两种方法,"update“和"update_many”。您可以使用update_many而不是指定'multi‘选项来更新所有文档。
OPs案例的示例用法:
Group.collection.update_many({}, {'$unset' => {'groupable_type' => true}})注意:您可以使用点符号取消设置嵌入的文档:
Group.collection.update_many({}, {'$unset' => {'embedded_doc.groupable_type' => true}})注意: MongoDB不能很好地支持取消设置/更新数组中的字段。有关信息和解决方法,请参阅此帖子:https://jira.mongodb.org/browse/SERVER-1243。
发布于 2019-02-26 23:45:15
对于单个实例,可以(至少在Mongoid的最新版本中)在实例上直接使用unset
Group.first.unset('groupable_type')https://stackoverflow.com/questions/9144299
复制相似问题