肯定与this question有关,但由于没有明确的答案,我觉得我应该再问一次。有没有办法从Mongoid embeds_many关系中删除嵌入的文档,而不是持久化?
我想修改内存中嵌入文档的数组,然后用一次更新操作持久化所有更改。具体地说,我想:
发布于 2018-08-29 06:27:23
可以使用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!
发布于 2016-06-07 23:45:22
在使用Mongoid两年多之后,我了解到我想要实现的东西没有任何运算符。删除带有Mongoid的嵌入式文档总是会导致数据库调用。
在这种情况下,绕过Mongoid直接使用mongo-ruby-driver
会更容易一些。
发布于 2016-06-04 04:36:40
https://stackoverflow.com/questions/23691056
复制相似问题