绝对与this question有关,但由于没有明确答案,我觉得我应该再问一次。是否有任何方法从Mongoid embeds_many关系中删除嵌入文档而不保留?
我想修改内存中嵌入文档的数组 - 然后使用单个UPDATE操作保留所有更改。具体来说,我想:
答案 0 :(得分:2)
可以使用Mongoid删除嵌入的文档而无需保存。诀窍是使用assign_attributes
从父对象进行更改。例如:
class MyParent
include Mongoid::Document
field :name, type: String
embeds_many :my_children
def remove_my_child(child)
assign_attributes(my_children: my_children.select { |c| c != child })
end
end
class MyChild
include Mongoid::Document
embedded_in :my_parent
def remove
parent.remove_my_child(self)
end
end
my_parent = MyParent.first
my_first_child = my_parent.my_children.first
# no mongo queries are executed
my_first_child.remove
# now we can make another change with no query executed
my_parent.name = 'foo'
# and finally we can save the whole thing in one query which is the
# reason we used an embedded document in the first place, right?
my_parent.save!
答案 1 :(得分:0)
经过两年多次使用Mongoid之后,我已经了解到那里没有我想要实现的操作符。使用Mongoid删除嵌入的文档总是会导致数据库调用。
在这种情况下,绕过Mongoid并直接使用mongo-ruby-driver
更容易。
答案 2 :(得分:-1)